pandas 学习笔记-- 数据清洗和转换

 

         Pandas 是python的一个标准库,在数据预处理方面具有卓越的效果,因而被广泛使用。 Pandas 主要有三种数据结构 Series, DataFrame and Panel,前面两种使用非常广泛,后面一种使用比较少,因而没有关注。本文是对前两种数据类型的学习心得的分享, 有不足之处还希望大牛多多指导。


笔记内容

数据结构创建

数据基本操作

数据清洗和转换


 数据结构创建

创建Series 和DataFrame, 可以采用列表,数组,字典等多种方式,以下分别使用数组和字典创建Series,DataFrame .  

对于创建好的数据结构,通过操作其属性我们可以获得各种数据. 主要有四个属性 分别为 index, column, value, name,  name 主要用在层次索引和数据聚合分组中

创建Series 和DataFrame

 pandas 学习笔记-- 数据清洗和转换pandas 学习笔记-- 数据清洗和转换


数据基本操作  

获取df的列标签
也可以通过df.index 获取行索引标签

df.columns   




给行或列修改标签
直接给所有列该标签 df.columns = ('a','b','c','d'),修改单列或单行使用 df.rename(columns={'a':'aa'})
修改df列为keyd的标签名为test
df.rename(columns={'keyd':'test'})
pandas 学习笔记-- 数据清洗和转换







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']

下面是获取dfkeyb &keyb列的值,格式df['keyb','keyb']生成的是一个Series结构数据
df[['keyb','keyd']]生成的是一个DataFrame结构, 

df[['keyb','keyd']]
pandas 学习笔记-- 数据清洗和转换





df还可进行逻辑取值操作,下面是获取keyb列值大于45的一个数据数组
df[df['keyb']>45]
pandas 学习笔记-- 数据清洗和转换

df进行排序 

采用df.sort_index(by='colname'), 目前df.sort_index被弃用,改为df.sort_values
df.sort_values(by='keyc')
pandas 学习笔记-- 数据清洗和转换






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)
pandas 学习笔记-- 数据清洗和转换

















数据清洗和转换


数据清洗转换和合并 主要使用的方法有merge, concat and join 
merge 参数说明如下
pandas 学习笔记-- 数据清洗和转换



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 学习笔记-- 数据清洗和转换






pandas使用concat拼接数组,而在numpy中则使用concatenate, np.concatenate(arr1, arr2)
concat的参数说明如下

pandas 学习笔记-- 数据清洗和转换


concat连接df1 df2







merge的基础上来连接df1 df2,为查看数据方便,把df2keya列标签改名为ca
df1 = df.ix[:2,:-2]
df2.rename(columns={"keya":'ca'})
pd.concat([df1,df2], axis=1)

pandas 学习笔记-- 数据清洗和转换
 

jion连接df1 df2

join拼接相当于直接连接,其连接过程也有类似mergehow连接方式,最直接join连接如下
df1.join(df2)





数据旋转





数据重塑和旋转主要使用unstackstack,前者是将行旋转为列,或者是将列转为行
下面例子是创建一个df3为原来df0-2行以及keyakeyb列,利用unstack旋转, 
df3 = df.ix[:2,:2]
df3.unstack()







数据去重


如去重复项,可以使用pandasduplicateddrop_duplicates方法
df4 = pd.DataFrame({'k1':['one']*3+['two'], 'k2':(1,2,3,2)})
df4.drop_duplicates(['k2'])

pandas 学习笔记-- 数据清洗和转换



本文对pandas的数据操作举例每项只列了一项,更多pandas的深入学习请参考

http://pandas.pydata.org/pandas-docs/stable/10min.html