DataFrame多表合并拼接函数concat、merge参数详解+代码操作展示
data = {'name': ['user1', 'user2', 'user3', 'user4', 'user5'],
'old': [21, 18, 22, 28, 26],
'weight': [124, 124, 102,107,121]
}
test_DataFrame1= pd.DataFrame(data)
test_DataFrame1
data = {'name': ['user1', 'user3', 'user5', 'user6', 'user7'],
'old': [21, 22, 26, 30, 31],
'high': [171, 165, 180,175,159]
}
test_DataFrame2= pd.DataFrame(data)
test_DataFrame2
其他语言中都有concat函数,在C语言中为字符串拼接,在SQL中也为字符串拼接,而在Pandas中相当于数据库中的全连接(Union all):沿着一条轴,将多个对象堆叠到一起,大家不要搞混了。与数据库不同的是,它不会去重,但是可以使用drop_duplicates方法达到去重的效果。
语法如下:
concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False,
keys=None, levels=None, names=None, verify_integrity=False, copy=True):
参数解释:
直接使用concat不加参数时为:
pd.concat([test_DataFrame1,test_DataFrame2])
此时axis默认为0则为行连接,该为axis为1时:
pd.concat([test_DataFrame1,test_DataFrame2],axis=1)
行数不变列增加。改变join为交集时仅与有相同列合并其他删除:
pd.concat([test_DataFrame1,test_DataFrame2],axis=0,join='inner')
同理axis为1时也一样仅看行索引是否相同
pd.concat([test_DataFrame1,test_DataFrame2],axis=1,join='inner')
新版本的pandas已经删除了join_axes,这一功能可以用merge代替。
而ignore_index就是把索引index对应替换掉:
pd.concat([test_DataFrame1,test_DataFrame2],axis=0,join='outer',ignore_index=True)
merge更像是SQL关系数据库那样根据表中相应的键来连接数据库,类似join。
语法如下:
merge(left, right, how='inner', on=None, left_on=None, right_on=None,
left_index=False, right_index=False, sort=True,
suffixes=('_x', '_y'), copy=True, indicator=False)
官网:pandas.merge
参数说明:
仍然是之前两个DataFrame,默认效果为:
pd.merge(test_DataFrame1,test_DataFrame2)
该为交集则根据index合并,若没有的索引值则会自动NaN填补:
pd.merge(test_DataFrame1,test_DataFrame2,how='outer')
若想指定特定列名进行索引,则需要on函数:
pd.merge(test_DataFrame1,test_DataFrame2,how='outer',on='name')
如果两个DataFrame对象都有“old”,则结果中就会出现“old_x”和"old_y“
若是两表中列名不一样,如创建一个DataFrame3:
想要和DataFrame1合并时可以使用left_on和right_on:
pd.merge(test_DataFrame1,test_DataFrame3,how='outer',left_on=['name'],right_on=['user'])
行就不展示了效果一样,sort排序:
pd.merge(test_DataFrame1,test_DataFrame2,how='outer',sort=True)