8. 比较concat, append, merge, join 连接DataFrame
8.1 比较
- 连接方向
- concat可以横向纵向连接对象;
- appned是纵向连接对象;
- merge和join是横向连接对象。
- 连接对象
- concat,append一次可以连接多个对象,可以是多个Series、DataFrame或者2者混合
- merge,join一次只能连接2个
- append可以为DF追加行,要求行是Series,DF或字典
- 连接方式
- concat左右连接时,不能指定连接键,只能使用index作为连接键;只提供inner和outer的连接方式
- merge提供了更多连接方式:{‘left’, ‘right’, ‘outer’, ‘inner’, ‘cross’},join提供:{‘left’, ‘right’, ‘outer’, ‘inner’}
8.2 函数原型
pandas.concat(objs, axis=0, join='outer', ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, sort=False, copy=True)
DataFrame.append(other, ignore_index=False, verify_integrity=False, sort=False)
pandas.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=('_x', '_y'), copy=True, indicator=False, validate=None)
DataFrame.join(other, on=None, how='left', lsuffix='', rsuffix='', sort=False)
8.3 总结
按行连接可以选择concat,join,merge,满足需求的情况下就选join和merge。因为书写方便,可以写成df1.join(...)
.
按列连接可选concat,append,优先选append。原因同样是书写方便。
要注意,这4个函数都不是原地的。比如df1.append(df2)
并没有修改df1
,需要写成df1=df1.append(df2)