导入包
importpandas as pdimport numpy as np
导入数据
#默认utf-8,gbk对中文的支持更好
pd.read_csv(filename,encoding='gbk')#key是列名,value是数据,从字典导入数据需要指定index
dict1 = {'a':1,'b':2}
df= pd.DataFrame(dict1,index=[0])
查看数据
#行数、列数
df.shape[0]
df.shape[1]#前几行,后几行,默认为5
df.head()
df.tail(3)#数据汇总统计
df.describe()#数据概况
df.info()#列名
df.columns#数据类型
df.dtypes#各列平均值
df.mean()
数据选取
#按列名查看某列
df[col_name]
df.col_name#查列名看多列
df[[col1,col2]]#按索引查看某行,第一行:
df.iloc[0]#按索引查看某行某列,三行四列那个元素
df.iloc[2,3]
数据合并
#按行拼接
pieces = [df[2:20],df[23:30],df[35:40]]
df2=pd.concat(pieces)#按列拼接
left = pd.DataFrame({'key': ['foo', 'bar'], 'col1': [1, 2]})
right= pd.DataFrame({'key': ['foo', 'bar'], 'col2': [4, 5]})
pd.merge(left,right,on='key')#增加一列
df = pd.DataFrame(np.random.randn(8, 4), columns=['A','B','C','D'])
extra= df.iloc[-1]
data= df.append(extra)
数据清理 (注意: 修改DataFrame要赋值)
#检查是否空值,返回布尔值(rue,False)
df.isnull()#返回各列空值的个数
df.isnull().sum()#处理空值,用x替换空值
df =df.fillna(x)#删除包含空值的行
df =df.dropna()#删除包含空值的列
df = df.dropna(axis=1)
数据处理
#选择某列大于1的行
df[df[colname]>1]#选择某列包含x或者y字段的行,pandas有很多字符串处理函数
df[df[colname].str.contains(x|y)]#替换字符
df[df[colname].replace('k','000')]#转换数据类型
df.num =df.num.astype(float)#查看某列的唯一值的个数
df.colname.value_counts()#按照某列排序(默认升序)
df.sort_values(by = colname,ascending=True)#应用函数,简单的可以用lambda
df.apply(lambda x:x.max()-x.min())#复杂的可以先定义好函数
deffunc():passdf.apply(func)#也可以用numpy自带的,例如cumsum累加
df.apply(np.cumsum)
分组聚合
#准备数据
df = pd.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar','foo', 'bar', 'foo', 'foo'],'B' : ['one', 'one', 'two', 'three','two', 'two', 'one', 'three'],'C' : np.random.randn(8),'D' : np.random.randn(8)})#对两列进行分组并求均值,类似于SQL里的group by
df.groupby(['A','B']).mean()#数据透视表,以col1为行,col2为列,取col3和col4的最大值,可以参考Excel的数据透视表
df.pivot_table(index=col1,columns=col2,values=[col3,col4],aggfunc=max)