pandas备忘录,速查指南
import pandas as pd
import numpy as np
创建测试对象
df=pd.DataFrame(np.random.rand(8 ,5 ))
df
s=pd.Series([1 ,2 ,3 ,4 ,5 ,4 ,3 ,3 ])
s
0 1 1 2 2 3 3 4 4 5 5 4 6 3 7 3 dtype: int64
df.index=pd.date_range('2017/7/7' ,periods=df.shape[0 ])
df
0 1 2 3 4 2017-07-07 0.012990 0.222129 0.006620 0.159968 0.793618 2017-07-08 0.037272 0.922143 0.983703 0.700587 0.635600 2017-07-09 0.666490 0.580949 0.344286 0.983580 0.191135 2017-07-10 0.753393 0.740103 0.848195 0.425948 0.804801 2017-07-11 0.098832 0.885919 0.758991 0.395071 0.486679 2017-07-12 0.214162 0.987658 0.808605 0.836370 0.169363 2017-07-13 0.850117 0.064044 0.352711 0.330994 0.837915 2017-07-14 0.731037 0.705015 0.090190 0.106667 0.695663
浏览、检查数据
df.head(4 )
0 1 2 3 4 2017-07-07 0.012990 0.222129 0.006620 0.159968 0.793618 2017-07-08 0.037272 0.922143 0.983703 0.700587 0.635600 2017-07-09 0.666490 0.580949 0.344286 0.983580 0.191135 2017-07-10 0.753393 0.740103 0.848195 0.425948 0.804801
df.tail(4 )
0 1 2 3 4 2017-07-11 0.098832 0.885919 0.758991 0.395071 0.486679 2017-07-12 0.214162 0.987658 0.808605 0.836370 0.169363 2017-07-13 0.850117 0.064044 0.352711 0.330994 0.837915 2017-07-14 0.731037 0.705015 0.090190 0.106667 0.695663
df.shape
(8, 5)
df.info()
df.describe()
0 1 2 3 4 count 8.000000 8.000000 8.000000 8.000000 8.000000 mean 0.420536 0.638495 0.524163 0.492398 0.576847 std 0.360814 0.334879 0.372283 0.316715 0.269292 min 0.012990 0.064044 0.006620 0.106667 0.169363 25% 0.083442 0.491244 0.280762 0.288237 0.412793 50% 0.440326 0.722559 0.555851 0.410510 0.665631 75% 0.736626 0.894975 0.818503 0.734532 0.796414 max 0.850117 0.987658 0.983703 0.983580 0.837915
s.value_counts(dropna=False )
3 3 4 2 5 1 2 1 1 1 dtype: int64
df.apply(pd.Series.value_counts)
0 1 2 3 4 0.006620 NaN NaN 1.0 NaN NaN 0.012990 1.0 NaN NaN NaN NaN 0.037272 1.0 NaN NaN NaN NaN 0.064044 NaN 1.0 NaN NaN NaN 0.090190 NaN NaN 1.0 NaN NaN 0.098832 1.0 NaN NaN NaN NaN 0.106667 NaN NaN NaN 1.0 NaN 0.159968 NaN NaN NaN 1.0 NaN 0.169363 NaN NaN NaN NaN 1.0 0.191135 NaN NaN NaN NaN 1.0 0.214162 1.0 NaN NaN NaN NaN 0.222129 NaN 1.0 NaN NaN NaN 0.330994 NaN NaN NaN 1.0 NaN 0.344286 NaN NaN 1.0 NaN NaN 0.352711 NaN NaN 1.0 NaN NaN 0.395071 NaN NaN NaN 1.0 NaN 0.425948 NaN NaN NaN 1.0 NaN 0.486679 NaN NaN NaN NaN 1.0 0.580949 NaN 1.0 NaN NaN NaN 0.635600 NaN NaN NaN NaN 1.0 0.666490 1.0 NaN NaN NaN NaN 0.695663 NaN NaN NaN NaN 1.0 0.700587 NaN NaN NaN 1.0 NaN 0.705015 NaN 1.0 NaN NaN NaN 0.731037 1.0 NaN NaN NaN NaN 0.740103 NaN 1.0 NaN NaN NaN 0.753393 1.0 NaN NaN NaN NaN 0.758991 NaN NaN 1.0 NaN NaN 0.793618 NaN NaN NaN NaN 1.0 0.804801 NaN NaN NaN NaN 1.0 0.808605 NaN NaN 1.0 NaN NaN 0.836370 NaN NaN NaN 1.0 NaN 0.837915 NaN NaN NaN NaN 1.0 0.848195 NaN NaN 1.0 NaN NaN 0.850117 1.0 NaN NaN NaN NaN 0.885919 NaN 1.0 NaN NaN NaN 0.922143 NaN 1.0 NaN NaN NaN 0.983580 NaN NaN NaN 1.0 NaN 0.983703 NaN NaN 1.0 NaN NaN 0.987658 NaN 1.0 NaN NaN NaN
选择数据
df[0 ]
2017-07-07 0.012990 2017-07-08 0.037272 2017-07-09 0.666490 2017-07-10 0.753393 2017-07-11 0.098832 2017-07-12 0.214162 2017-07-13 0.850117 2017-07-14 0.731037 Freq: D, Name: 0, dtype: float64
df[[2 ,4 ,3 ]]
2 4 3 2017-07-07 0.006620 0.793618 0.159968 2017-07-08 0.983703 0.635600 0.700587 2017-07-09 0.344286 0.191135 0.983580 2017-07-10 0.848195 0.804801 0.425948 2017-07-11 0.758991 0.486679 0.395071 2017-07-12 0.808605 0.169363 0.836370 2017-07-13 0.352711 0.837915 0.330994 2017-07-14 0.090190 0.695663 0.106667
s
0 1 1 2 2 3 3 4 4 5 5 4 6 3 7 3 dtype: int64
s.iloc[2 ]
3
s.loc[2 ]
3
df.iloc[0 ,:]
0 0.012990 1 0.222129 2 0.006620 3 0.159968 4 0.793618 Name: 2017-07-07 00:00:00, dtype: float64
df.iloc[0 ,0 ]
0.012990160364784065
数据清洗
df=pd.DataFrame([[1 ,2 ,3 ,8 ,5 ],[6 ,7 ,np.NaN,8 ,9 ],[2 ,3 ,np.NaN,np.NaN,0 ],[3 ,4 ,5 ,6 ,7 ]])
df
0 1 2 3 4 0 1 2 3.0 8.0 5 1 6 7 NaN 8.0 9 2 2 3 NaN NaN 0 3 3 4 5.0 6.0 7
df.columns=['a' ,'b' ,'c' ,'d' ,'e' ]
pd.isnull(df)
a b c d e 0 False False False False False 1 False False True False False 2 False False True True False 3 False False False False False
pd.notnull(df)
a b c d e 0 True True True True True 1 True True False True True 2 True True False False True 3 True True True True True
df.dropna()
df.dropna(axis=1 )
df.dropna(axis=1 ,thresh=3 )
a b d e 0 1 2 8.0 5 1 6 7 8.0 9 2 2 3 NaN 0 3 3 4 6.0 7
df.fillna(x)
s.fillna(s.mean())
s.astype(float)
s.replace(1 ,'one' )
s.replace([1 ,3 ],['one' ,'three' ])
df.columns=[1 ,2 ,3 ,4 ,5 ]
df
1 2 3 4 5 0 1 2 3.0 8.0 5 1 6 7 NaN 8.0 9 2 2 3 NaN NaN 0 3 3 4 5.0 6.0 7
df.rename(columns=lambda x:x+1 )
2 3 4 5 6 0 1 2 3.0 8.0 5 1 6 7 NaN 8.0 9 2 2 3 NaN NaN 0 3 3 4 5.0 6.0 7
df.rename(columns={'old_name' :'new_name' })
df.set_index(1 )
2 3 4 5 1 1 2 3.0 8.0 5 6 7 NaN 8.0 9 2 3 NaN NaN 0 3 4 5.0 6.0 7
df.rename(index=lambda x:x+1 )
1 2 3 4 5 1 1 2 3.0 8.0 5 2 6 7 NaN 8.0 9 3 2 3 NaN NaN 0 4 3 4 5.0 6.0 7
过滤,排序,分组
df[df[5 ]>2 ]
1 2 3 4 5 0 1 2 3.0 8.0 5 1 6 7 NaN 8.0 9 3 3 4 5.0 6.0 7
df[(df[5 ]>5 ) &(df[2 ]>4 )]
df.sort_values(2 )
1 2 3 4 5 0 1 2 3.0 8.0 5 2 2 3 NaN NaN 0 3 3 4 5.0 6.0 7 1 6 7 NaN 8.0 9
df.sort_values(2 ,ascending=False )
1 2 3 4 5 1 6 7 NaN 8.0 9 3 3 4 5.0 6.0 7 2 2 3 NaN NaN 0 0 1 2 3.0 8.0 5
df.sort_values([col1,col2],ascending=[True ,False ])
df.groupby(1 )
df.groupby([col1,col2])
df.groupby(col1)[col2].mean()
df.pivot_table(index=col1,values=[col2,col3],aggfunc=mean)
df.groupby(col1).agg(np.mean)
df.apply(np.mean)
1 3.000000 2 4.000000 3 4.000000 4 7.333333 5 5.250000 dtype: float64
df.apply(np.max,axis=1 )
0 8.0 1 9.0 2 3.0 3 7.0 dtype: float64
连接,结合
df1.append(df2)
df.concat([df1,df2],axis=1 )
df1.join(df2,on=col1,how='inner' )
统计函数
df.describe()
1 2 3 4 5 count 4.000000 4.000000 2.000000 3.000000 4.00000 mean 3.000000 4.000000 4.000000 7.333333 5.25000 std 2.160247 2.160247 1.414214 1.154701 3.86221 min 1.000000 2.000000 3.000000 6.000000 0.00000 25% 1.750000 2.750000 3.500000 7.000000 3.75000 50% 2.500000 3.500000 4.000000 8.000000 6.00000 75% 3.750000 4.750000 4.500000 8.000000 7.50000 max 6.000000 7.000000 5.000000 8.000000 9.00000
df.mean()
1 3.000000 2 4.000000 3 4.000000 4 7.333333 5 5.250000 dtype: float64
df.corr()
1 2 3 4 5 1 1.000000 1.000000 1.0 0.114708 0.679185 2 1.000000 1.000000 1.0 0.114708 0.679185 3 1.000000 1.000000 1.0 -1.000000 1.000000 4 0.114708 0.114708 -1.0 1.000000 0.000000 5 0.679185 0.679185 1.0 0.000000 1.000000
df.count()
1 4
2 4
3 2
4 3
5 4
dtype: int64
df.max()
1 6.0
2 7.0
3 5.0
4 8.0
5 9.0
dtype: float64
df.min()
1 1.0
2 2.0
3 3.0
4 6.0
5 0.0
dtype: float64
df.median()
1 2.5
2 3.5
3 4.0
4 8.0
5 6.0
dtype: float64
df.std()
1 2.160247
2 2.160247
3 1.414214
4 1.154701
5 3.862210
dtype: float64