pandas 学习笔记-- 数据清洗和转换
Pandas 是python的一个标准库,在数据预处理方面具有卓越的效果,因而被广泛使用。 Pandas 主要有三种数据结构 Series, DataFrame and Panel,前面两种使用非常广泛,后面一种使用比较少,因而没有关注。本文是对前两种数据类型的学习心得的分享, 有不足之处还希望大牛多多指导。
笔记内容
数据结构创建
数据基本操作
数据清洗和转换
数据结构创建
创建Series 和DataFrame, 可以采用列表,数组,字典等多种方式,以下分别使用数组和字典创建Series,DataFrame .
对于创建好的数据结构,通过操作其属性我们可以获得各种数据. 主要有四个属性 分别为 index, column, value, name, name 主要用在层次索引和数据聚合分组中
创建Series 和DataFrame
数据基本操作
获取df的列标签
也可以通过df.index 获取行索引标签
df.columns
给行或列修改标签 直接给所有列该标签 df.columns = ('a','b','c','d'),修改单列或单行使用 df.rename(columns={'a':'aa'}) 修改df列为keyd的标签名为test
df.rename(columns={'keyd':'test'})
对df进行取值操作
基本格式为 df[row, col], 具体对数据进行定位获取数据格式 有三种方式 df.loc[row, col] row&col是行列值的标签, df.iloc[row,col] row&col是行列值为数值, df.ix[row,col] row&col行列值可以是标签也可以是数值,该格式广泛被使用,可以取代前面两种 比如获取一行数据df.iloc[row2], 获取一列数据df['colname'] or df.ix[:,2] 下面是获取df的第三到四行,keyb列的数据 df.ix[2:3, 'keyb']
下面是获取df的keyb &keyb列的值,格式df['keyb','keyb']生成的是一个Series结构数据
df[['keyb','keyd']]生成的是一个DataFrame结构,
df[['keyb','keyd']]
df还可进行逻辑取值操作,下面是获取keyb列值大于45的一个数据数组 df[df['keyb']>45]
对df进行排序
采用df.sort_index(by='colname'), 目前df.sort_index被弃用,改为df.sort_values df.sort_values(by='keyc')
给df增加或删去行和列 增加一列 df['newcol']=df['keya'] 用keya列的值增加一个新列newcol 删去一列 df.drop(['keya'], axis=1) 删去keya列, df.drop(2,axis=0)删去第三行 增加一行 df.append(df.ix[1]) 下面将给df 增加一行 和一列,新增行为原df的第三列的值,列为原keyc列的值 df.append(df.ix[2], ignore_index=True)
数据清洗和转换
数据清洗转换和合并 主要使用的方法有merge, concat and join merge 参数说明如下
merge连接df1 和df2
创建df1 和df2,然后用merge将其合并再一起,该合并采用并集合并方式,因而会显示所有的行列标签,没有值的地方用NaN自动填充 df1 = df.ix[:2,:-2] df2 = pd.DataFrame(np.random.randint(10,60,size=(3,3)),columns=('keya','cb','cc')) pd.merge(df1,df2, on='keya',how='outer')
在pandas使用concat拼接数组,而在numpy中则使用concatenate, 如np.concatenate(arr1, arr2) concat的参数说明如下
concat连接df1 和df2
在merge的基础上来连接df1 和df2,为查看数据方便,把df2的keya列标签改名为ca df1 = df.ix[:2,:-2] df2.rename(columns={"keya":'ca'}) pd.concat([df1,df2], axis=1)
jion连接df1 和df2
join拼接相当于直接连接,其连接过程也有类似merge的how连接方式,最直接join连接如下 df1.join(df2)
数据旋转
数据重塑和旋转主要使用unstack和stack,前者是将行旋转为列,或者是将列转为行 下面例子是创建一个df3为原来df的0-2行以及keya和keyb列,利用unstack旋转, df3 = df.ix[:2,:2] df3.unstack()
数据去重
如去重复项,可以使用pandas的duplicated和drop_duplicates方法
df4 = pd.DataFrame({'k1':['one']*3+['two'], 'k2':(1,2,3,2)}) df4.drop_duplicates(['k2'])
本文对pandas的数据操作举例每项只列了一项,更多pandas的深入学习请参考
http://pandas.pydata.org/pandas-docs/stable/10min.html