合并数据集:
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上