利用Python进行数据分析之第七章记录 数据规整化:清理、转换、合并、重塑

合并数据集:

pandas对象中的数据可以通过一些内置的方式进行合并:

pandas.merge可根据一个或多个键将不同DataFrame中的行连接起来。SQL或其它关系型数据库的用户对此应该会比较熟悉,因为它实现的就是数据库的连接操作。

pandas.concat可以沿着一条轴将多个对象堆叠到一起。

combine_first可以将重复数据编接在一起,用一个对象的值填充另一个对象中的缺失值。

数据库风格的DataFrame

如果没有指定,merge就会将重叠列的列名当作键。最好用on=''key"显式指定一下。(on中指定叠列的列名)

如:pandas.merge(dataframe1,dataframe2,on='key')

如果两个对象的列名不同,也可以分别指定,如下:

dataframe1 = DataFrame({'lkey':['b','b','a','c','a','a','b'],'data1':range(7)})

dataframe2 = DataFrame({'rkey':['a','b','d'],'data1':range(3)})

pandas.merge(dataframe1,dataframe2,left_on='lkey',right_on='rkey')

默认情况下,merge做的是“inner”链接,结果中的键是交集。其他方式还有“left”,"right","outer",外部连接(outer)取的是键的并集,结合了左连接和右连接的效果。(how中指定数据集的链接方式。如果没有重叠列,无法指定how为inner,left,right,outer的任何一种)

如下:

dataframe3 = DataFrame({'key':['b','b','a','c','a','a','b'],'data1':range(7)})

dataframe4 = DataFrame({'key':['a','b','d'],'data2':range(3)})

并集:pandas.merge(dataframe3,dataframe4,on='key',how='outer')

左连接:pandas.merge(dataframe3,dataframe4,how='left')

右连接:pandas.merge(dataframe3,dataframe4,how='right')

根据多个键进行合并的情况:

left = DataFrame({'key1':{"a","b","c"},'key2':{"one","two","three"},'lval':[1,2,3]})

right= DataFrame({'key1':{"a","b","c","d"},'key2':{"one","two","three","four"},'rval':[4,5,6,7]})

pd.merge(left,right,on=['key1','key2'],how='outer')

对上面left,right重复列名的处理:

merge有个suffixes的选项,用于指定附加到DataFrame对象的重叠列名上的字符串(不会附加到在on中指出的列名上)

pd.merge(left, right, on=['key1','key2'], suffixes=('_left', '_right'))//suffixes不起作用
pd.merge(left, right,suffixes=('_left', '_right'))//suffixes不起作用
上面两个显示内容一样

pd.merge(left, right, on=['key1'], suffixes=('_left', '_right'))//suffixes会附加到key2上

 

猜你喜欢

转载自blog.csdn.net/shanghome/article/details/81144529