一、按列取、按索引/行取、按特定行取
1 import numpy as np 2 from pandas import DataFrame 3 import pandas as pd 4 5 df=DataFrame(np.arange(12).reshape((3,4)),index=['one','two','thr'],columns=list('abcd')) 6 7 df['a']#取a列 8 df[['a','b']]#取a、b列 9 10 #ix可以用數字索引,也可以用index和column索引 11 df.ix[0]#取第0行 12 df.ix[0:1]#取第0行 13 df.ix['one':'two']#取one、two行 14 df.ix[0:2,0]#取第0、1行,第0列 15 df.ix[0:1,'a']#取第0行,a列 16 df.ix[0:2,'a':'c']#取第0、1行,abc列 17 df.ix['one':'two','a':'c']#取one、two行,abc列 18 df.ix[0:2,0:1]#取第0、1行,第0列 19 df.ix[0:2,0:2]#取第0、1行,第0、1列 20 21 #loc只能通過index和columns來取,不能用數字 22 df.loc['one','a']#one行,a列 23 df.loc['one':'two','a']#one到two行,a列 24 df.loc['one':'two','a':'c']#one到two行,a到c列 25 df.loc['one':'two',['a','c']]#one到two行,ac列 26 27 #iloc只能用數字索引,不能用索引名 28 df.iloc[0:2]#前2行 29 df.iloc[0]#第0行 30 df.iloc[0:2,0:2]#0、1行,0、1列 31 df.iloc[[0,2],[1,2,3]]#第0、2行,1、2、3列 32 33 #iat取某個單值,只能數字索引 34 df.iat[1,1]#第1行,1列 35 #at取某個單值,只能index和columns索引 36 df.at['one','a']#one行,a列
二、按條件取行
1 #選取等於某些值的行記錄 用 == 2 df.loc[df[‘column_name’] == some_value] 3 4 #選取某列是否是某一類型的數值 用 isin 5 df.loc[df[‘column_name’].isin(some_values)] 6 7 #多種條件的選取 用 & 8 df.loc[(df[‘column’] == some_value) & df[‘other_column’].isin(some_values)] 9 10 #選取不等於某些值的行記錄 用 != 11 df.loc[df[‘column_name’] != some_value] 12 13 #isin返回一系列的數值,如果要選擇不符合這個條件的數值使用~ 14 df.loc[~df[‘column_name’].isin(some_values)]
三、查看、檢查數據
1 #查看DataFrame對象的前n行 2 df.head(n) 3 4 #查看DataFrame對象的最后n行 5 df.tail(n) 6 7 #查看行數和列數 8 df.shape() 9 10 #查看索引、數據類型和內存信息 11 df.info() 12 13 #查看數值型列的匯總統計 14 df.describe() 15 16 #查看Series對象的唯一值和計數 17 s.value_counts(dropna=False) 18 19 #查看DataFrame對象中每一列的唯一值和計數 20 df.apply(pd.Series.value_counts)
四、數據清理
1 #重命名列名 2 df.columns = ['a','b','c'] 3 4 #檢查DataFrame對象中的空值,並返回一個Boolean數組 5 pd.isnull() 6 7 #檢查DataFrame對象中的非空值,並返回一個Boolean數組 8 pd.notnull() 9 10 #刪除所有包含空值的行 11 df.dropna() 12 13 #刪除所有包含空值的列 14 df.dropna(axis=1) 15 16 #刪除所有小於n個非空值的行 17 df.dropna(axis=1,thresh=n) 18 19 #用x替換DataFrame對象中所有的空值 20 df.fillna(x) 21 22 #將Series中的數據類型更改為float類型 23 s.astype(float) 24 25 #用‘one’代替所有等於1的值 26 s.replace(1,'one') 27 28 #用'one'代替1,用'three'代替3 29 s.replace([1,3],['one','three']) 30 31 #批量更改列名 32 df.rename(columns=lambda x: x + 1) 33 34 #選擇性更改列名 35 df.rename(columns={'old_name': 'new_ name'}) 36 37 #更改索引列 38 df.set_index('column_one') 39 40 #批量重命名索引 41 df.rename(index=lambda x: x + 1)
五、數據處理:Filter、Sort和GroupBy
1 #選擇col列的值大於0.5的行 2 df[df[col] > 0.5] 3 4 #按照列col1排序數據,默認升序排列 5 df.sort_values(col1) 6 7 #按照列col1降序排列數據 8 df.sort_values(col2, ascending=False) 9 10 #先按列col1升序排列,后按col2降序排列數據 11 df.sort_values([col1,col2], ascending=[True,False]) 12 13 #返回一個按列col進行分組的Groupby對象 14 df.groupby(col) 15 16 #返回一個按多列進行分組的Groupby對象 17 df.groupby([col1,col2]) 18 19 #返回按列col1進行分組后,列col2的均值 20 df.groupby(col1)[col2] 21 22 #創建一個按列col1進行分組,並計算col2和col3的最大值的數據透視表 23 df.pivot_table(index=col1, values=[col2,col3], aggfunc=max) 24 25 #返回按列col1分組的所有列的均值 26 df.groupby(col1).agg(np.mean) 27 28 #對DataFrame中的每一列應用函數np.mean 29 data.apply(np.mean) 30 31 #對DataFrame中的每一行應用函數np.max 32 data.apply(np.max,axis=1)
六、數據合並
1 #將df2中的行添加到df1的尾部 2 df1.append(df2) 3 4 #將df2中的列添加到df1的尾部 5 df.concat([df1, df2],axis=1) 6 7 #對df1的列和df2的列執行SQL形式的join 8 df1.join(df2,on=col1,how='inner')
七、數據統計
#查看數據值列的匯總統計 df.describe() #返回所有列的均值 df.mean() #返回列與列之間的相關系數 df.corr() #返回每一列中的非空值的個數 df.count() #返回每一列的最大值 df.max() #返回每一列的最小值 df.min() #返回每一列的中位數 df.median() #返回每一列的標准差 df.std()