一、DataFrame的索引
1,選擇列
1 import pandas as pd 2 import numpy as np 3 from pandas import Series, DataFrame 4 5 df = DataFrame(np.random.rand(12).reshape((3,4)), 6 index = ['one', 'two', 'three'], 7 columns= list('abcd') 8 ) 9 print(df) 10 type(df['a']) 11 df[['a','c']] # dataframe
注:df[ ]--選擇列,整數可以選擇行,但是不能單獨選擇,要用切片的方式如df[:2]
2,選擇行
df1 = DataFrame(np.random.rand(12).reshape((3,4)), index = [3,2,1], columns= list('abcd') ) print(df1) df.loc['one'] # 單獨的行,返回的也是一個Series對象 # df1.loc[0] # 整數的索引,只能是index 是默認的整數時 df.loc[['one','three','four']] # 多行,返回的也是一個Dataframe對象 df1.loc[2:1] # df.loc['two':'three'] # index 標簽切片,閉區間 # df.loc[label] 主要是針對行索引,同時指出指定index,及默認的index
注:df.loc[ ]--按index選擇行,字符串標簽索引
3,另外一種索引方法
df.iloc[] 按照整數位置(從0到length-1)選擇行
類似於list的索引,順序就是dataframe的整數位置,從0開始算
1 print(df) 2 df.iloc[0] # 一行 3 # df.iloc[3] 不能超出索引的范圍 4 df.iloc[[0,1]] # 選擇多行,返回dataframe對象 5 6 df.iloc[[1,0]] # 選擇的多行,順序可變 7 df.iloc[::2]
4,布爾型索引
原理和Series原理相同
1 # df = df/10000 2 print(df) 3 b1 = df < 20 # 返回一個和df形狀相同的布爾型 dataframe 4 df[b1] # 返回一個dataframe,所有數據,True返回原數據,False 返回NaN 5 6 b2 = df['a'] > 50 # 單列,就是Series 7 # print(b2, type(b2)) 8 df[b2] # 單列做判斷,保留判斷為True的行數據 9 10 # 多列做判斷 11 b3 = df[['a', 'b']] > 50 # 返回一個布爾型的dataframe 12 print(b3) 13 print(df[b3]) # 返回形狀相同的dataframe 為True位置返回數據,False和其他位置都返回NaN
5,多重索引,同時索引列和行
1 print(df) 2 df['a'].loc[['one','three']] 3 df[['b', 'c', 'd']].iloc[::2] 4 df[df['a']<50].iloc[0]
二、DataFrame的基本操作
1,數據查看和轉置
1 df = DataFrame(np.random.rand(16).reshape((4,4))) 2 df.head(2) 3 df.tail() 4 # .T 5 print(df) 6 print(df.T)
2,添加和修改
1 df.columns = list('abcd') 2 df['e'] = 10 # 指定添加一列,標量重復 3 df
1 # 添加一行,df數據同上 2 df.loc[4]=5 3 print(df)
1 # 修改,df數據同上 2 df['e'] = 0 3 print(df)
1 # 修改多列,df數據同上 2 df[['d','e']] = 88 3 print(df) 4 # 直接索引賦值
3,刪除
1 # 刪除一列 del df數據同上 2 del df['e'] 3 print(df)
1 # 刪除的第二種方法 2 df.drop(0) # drop 默認會返回刪除后的datafarme
1 # drop() axis=0 刪除行 axis=1 刪除列 2 df.drop('a', axis=1)
1 # drop 默認會返回一個新的值,設置 inplace=True修改原數據 2 df.drop(0,inplace=True)
3 df
4,對齊
1 df = DataFrame(np.arange(16).reshape((4,4)), columns=list('abcd')) 2 df1 = DataFrame(np.arange(9).reshape((3,3)), columns=list('cba')) 3 print(df) 4 print(df1) 5 # 按照行和列的標簽自動對齊 6 df+df1
5,排序
1 df = DataFrame(np.random.randint(16,size=[4,4]), columns=list('abcd')) 2 df 3 # 按值排序 4 df.sort_values('b', ascending=False) # 按照列標簽等於b的那一列的值進行排序,默認從小到大 ascending=True 默認,False降序 5 6 df.sort_values(['b','c']) # 聯合
1 # 默認axis=0 ,就是要用列的值,去對行進行排序,所以第一個參數需要傳入 列索引 2 # axis=1 ,就是用行的值,去對列進行排序,傳入行索引 3 df.sort_values(2, axis=1)
1 # 按索引排序 2 df.index = [5,2,4,1] 3 df.columns = list('adce') 4 print(df) 5 6 df.sort_index(ascending=False) # 默認按行索引進行降序 ascending=False 降序 7 # axis=1 按列索引排序 8 df.sort_index(axis=1)