pandas(11):数据合并
Posted 数据の变异
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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\')
3 df.join()
4 df.append()
以上是关于pandas(11):数据合并的主要内容,如果未能解决你的问题,请参考以下文章
Pandas:将 DataFrame 与嵌套数组结合或合并 JSON 输出
使用 3 列合并 Pandas 中的 2 个数据框 [重复]