Pandas杂碎

本文主要是平时运用Pandas的小积累,涉及到读写文件,格式转换、缺失值填充,简单统计等多个方面。

读写csv文件到DataFrame

df=pd.read_csv('filename',encoding='utf-8')
读入csv文本,编码为utf-8
df.to_csv('filename',sep='\t',index=False)
‘\t’切分df,写入csv,不包含行索引

格式转换、值填充、删除

df.to_dict(outtype='dict')
将DataFrame转换成其他结构类型,outtype的参数为‘dict’、‘list’、‘series’和‘records’
df['A'].astype(float)
将DataFrame的A列类型更改成float
df.rename(columns={'oldname': 'newname'}, inplace=True) #修改列名
df.fillna(0) #NaN用0填充,处理缺失值
df.drop_duplicates(subset=['A'],keep='first')
按A列去重,保留第一行,keep(’first’,’last’,False)

查看DataFrame概要

df.head() #前几行
df.tail() #末几行
df.index #行标签
df.columns #列标签
df.dtypes #每一列数据类型
df['column'].count() #column列非空条数
df['column'].isnull() #column列是否有NaN的数据
df['column'].unique() #column列所有值

简单统计

df.describe() #各列基本描述统计值
df['A'].value_counts() #计算A列每个值的频率

排序

df.sort_index(axis=1,ascending=False)
对DataFrame的axis=0(行),1(列)索引排序(ascending=True(升),False(降))
df.sort_index(by=['A', 'B'], ascending=[True, False])<==>df.sort_values(by=['A', 'B'], ascending=[True, False])<==>df.sort(columns=['A','B'],ascending=[1,0])
对DataFrame先按’A’升排序, 再按’B’降排序

分组

df.groupby(subset=['A','B'],as_index=True) #以列A,B对df进行分组,默认A,B作为分组索引
df.groupby(by=['A'],as_index=True).get_group('a') #按A列分组后获取’a’组
df.groupby(['col1','col2']).size().to_frame(name ='count')
<==>df.groupby(['col1','col2']).size().reset_index(name ='count')
按col1,col2对df进行分组,size()统计每一分组成员个数(count()也可以,区别就是count()过滤了NaN,size()包含),命名为’count’

选择DataFrame行列

示例参考
df.iloc[<row selection>,<col selection>] #基于行列索引选择(Selecting rows by label/index)
df.loc[<row selection>,<col selection>] #基于条件选择(Selecting rows with a boolean / conditional lookup)
ix[] #索引,条件混合选择

df[df['A'].isin(li)] #选择A列值在列表li中的行
df.saple(n=3) #随机抽取3行数据,

归一化处理

1
2
3
from sklearn import preprocessing
df=preprocessing.scale(df,axis=0) #df每一个feature归一化(列)
df=preprocessing.scale(df,axis=1) #df每一个sample归一化(行)

离散特征one-hot编码

df = pd.get_dummies(df['A'], prefix='A') #对A列重新编码,编码后的列前缀加上’A’
df = pd.get_dummies(df) #对df所有离散特征进行one-hot编码

合并——merge、concat、append

df1.append(df2,ignore_index=True) #在df1下面追加df2,行索引重排序
pd.concat([df1['A'],df2],axis=1) #列方向合并
pd.merge(df1, df2, how='inner', on=None, left_on=None, right_on=None,left_index=False, right_index=False)
how=[‘inner’,’left’,’right’,’outer’]对应内,左,右,外连接,on指定连接key

分享