pandas(11):数据合并
1 pd.concat()轴连接合并
pd.concat(objs, axis=0, join='outer',
join_axes=None, ignore_index=False, keys=None, levels=None,
names=None, verify_integrity=False, sort=None, copy=True)
功能说明:
多个dataframe或者series拼接到一起。指定方向(上下堆叠、左右拼接),指定合并方式(交集、并集)。
参数说明:
- objs:连接的对象,多个 DataFrame 或者 Series。例如[df1,df2];
- axis:指定合并的方向。0,纵向合并,对比列标签;1,横向合并,对比行标签;
- join:连接方式。outer,并集(index全部需要);inner,交集(只取index重合的部分);
- join_axes:传入需要保留的index,如[df1.index]或[df1.columns],在官方文档中提醒即将被弃用。
- ignore_index:是否保留原表索引,默认保留,为 True 会自动增加自然索引。
- keys:构造层次结构索引,给每个表指定一个一级索引。
- levels:不常用,传入序列列表,默认值无。用于构建MultiIndex的特定级别(唯一值)。
- names:索引的名称,包括多层索引,标记每条记录来自于哪个表。
- verify_integrity:
- sort:布尔值,默认值无。当" join"为" outer"时,如果有未对齐的轴,则对轴信息进行排序。不设置sort会有警告信息。
- 显式传递``sort = True''使警告静音,进行排序。
- 显式传递``sort = False''以使警告静音而不进行排序。
- 当"join ='inner'"已经保留了非串联轴的顺序时,这个命令无效。
- copy:bool,默认为True,如果为False,则不要不必要地复制数据。
数据源:
# ①基本连接:纵向合并,取交集
pd.concat([df1, df2])
# ②axis = 1,横向合并
pd.concat([df1,df2],axis=1)
# ③join = 'inner',取交集
pd.concat([df1,df2],join='inner')
pd.concat([df1,df2],join='inner',axis=1)
# ④join_axes=[df.index],根据需要保留的index进行合并
pd.concat([df1,df2],join_axes=[df1.columns])
pd.concat([df1,df2],axis=1,join_axes=[df2.index])
# ⑤ignore_index =True,丢弃原表索引,增加自然索引
pd.concat([df1,df2],ignore_index=True)
pd.concat([df1,df2],ignore_index=True,axis=1)
# ⑥keys = ['df1','df2'],names=['来源表','列号'],在最外层添加一层索引,便于区分合并后的数据是哪个原表
pd.concat([df1,df2],keys=['df1','df2'])
# ⑥_1
pd.concat([df1,df2],keys=['df1','df2'],axis=1,names=['来源表','列号'])
2 pd.merge() 连接数据
pd.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)
功能说明:
具有全功能、高性能的内存连接操作,与 SQL 的方式很类似。只能用于两个表的拼接,通过参数名称也能看出连接方向是左右拼接,一个左表一个右表,而且参数中没有指定拼接轴的参数axis,不能用于表的上下拼接。
参数说明:
- left/right:参与合并的左侧/右侧DataFrame;
- how:连接方式:inner、outer、left、right。默认为inner;
- on:用于连接单个列名或组合列名['key1', 'key2']。必须同时存在左右两个DataFrame中。未显示指定且其他连接键也未指定,默认以左右两个表的共同列(组合列)作为连接键,建议显示指定;
- left_on/right_on:指定左右侧DataFrame的连接键;
- left_index/right_index:将左侧/右侧DataFrame的行索引作为连接键;
- sort:根据连接键对合并后的数据进行排序,禁用处理大数据获得更好的性能;
- suffixes:字符串元组,追加到重复列名的末尾,默认为('_x', '_y');
- copy:
- validate:检查重复键
- indicator:连接指示
①单个键链接:
# ①最简单连接:默认内连接,未指定连接键,取公共列作为连接键
pd.merge(left_df,right_df)
# 等价,建议显示指定
pd.merge(left_df,right_df,on='key')
②多个键链接:
# 不显示指定连接键,默认会以['key1','key2']作为链接键
pd.merge(left_df,right_df)
# 等价于(所以建议显示指定)
pd.merge(left_df,right_df,on=['key1','key2'])
# how='left',以左表为基表,右表无匹配为NaN
pd.merge(left_df,right_df,how='left',on=['key1','key2'])
# how='right',以右表为基表,左表无匹配为NaN
pd.merge(left_df,right_df,how='right',on=['key1','key2'])
# how=‘outer’,外连接,取交集
# 等价于左连接和右连接的并集(叠加)
pd.merge(left_df,right_df,how='outer',on=['key1','key2'])
③字段不相同指定连接键:
# left_on,right_on指定链接键,重复列会被标记区分
pd.merge(left_df,right_df,left_on='key',right_on='key1')