pandas入门笔记

来源:互联网 发布:diy装修房子软件 编辑:程序博客网 时间:2024/06/15 02:21

pandas备忘录,速查指南

import pandas as pdimport numpy as np

创建测试对象

df=pd.DataFrame(np.random.rand(8,5))#创建一个DataFramedf
s=pd.Series([1,2,3,4,5,4,3,3])#创建一个Seriess
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)#对Series进行唯一值统计计数
3 3 4 2 5 1 2 1 1 1 dtype: int64
df.apply(pd.Series.value_counts)#对所有列运用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]#返回DataFrame中的指定列,作为一个Series返回
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]]#将指定的列作为一个新的DataFrame对象返回
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]#对Series按位置选择
3
s.loc[2]#对Series按索引选择
3
df.iloc[0,:]#选择DataFrame的第一行,以Series对象返回
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]#选择DataFrame中的第一行的第一个元素,数据类型numpy.float64
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)#检查是否有null值,返回一个布尔值举止,null为True,这句也可写成df.isnull()形式
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)#与pd.isnull方法相反
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()#丢弃所有包含null值的行
df.dropna(axis=1)#丢弃所有包含null值的列
a b e 0 1 2 5 1 6 7 9 2 2 3 0 3 3 4 7
df.dropna(axis=1,thresh=3)#丢弃所有非null值个数少于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)#将所有的null值用x替换s.fillna(s.mean())#将所有的null值用平均值代替,这里的平均值可以替换成任何统计函数s.astype(float)#将数据类型转换为floats.replace(1,'one')#将值为1的值替换为ones.replace([1,3],['one','three'])#将所有的1替换为one,所有的3替换为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)#这个函数返回一个新的DataFrame对象,原来的df不变
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)#重命名索引,以指定的列作为索引,返回一个新的DataFrame对象
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)#批量修改索引,返回一个新的DataFrame对象
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]#返回列名为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)]#返回5列中大于5,并且2列中大于4的行
1 2 3 4 5 1 6 7 NaN 8.0 9
df.sort_values(2)#以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)#以2列降序排列
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])#以col1升序,col2降序排列
df.groupby(1)#以1列分组,返回一个groupby对象
df.groupby([col1,col2])#返回一个多列分组的结果df.groupby(col1)[col2].mean()#返回以col1分组后的col2列的平均值,这里mean()可以替换成其他统计函数df.pivot_table(index=col1,values=[col2,col3],aggfunc=mean)#创建一个数据透视表df.groupby(col1).agg(np.mean)#Finds the average across all columns for every unique column 1 group
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)#将df2的行加加到df1后面,列数必须相等df.concat([df1,df2],axis=1)#将列进行链接,行数必须相等df1.join(df2,on=col1,how='inner')#有点类似SQL里的内链接,how值还有'left','right','outer','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    42    43    24    35    4dtype: int64
df.max()
1    6.02    7.03    5.04    8.05    9.0dtype: float64
df.min()
1    1.02    2.03    3.04    6.05    0.0dtype: float64
df.median()#返回中位数
1    2.52    3.53    4.04    8.05    6.0dtype: float64
df.std()
1    2.1602472    2.1602473    1.4142144    1.1547015    3.862210dtype: float64