当前位置:   article > 正文

【Pandas】数据合并 \ concat() \ append() \ merge() \ join() \ combine_first()_pandas 数据合并 append

pandas 数据合并 append


引用Pandas:

整篇文章使用pd代替pandas

import pandas as pd
  • 1

直接合并

横向堆叠(横向合并)

有如下数据
在这里插入图片描述

外连接

# 将 df2拼接到 df1的右边
# 在列的方向上,直接合并!  在行的方向上,获取所有的行 ---- 在没有值的地方,使用NaN来填充!
ret = pd.concat(
    objs=(df1, df2),  # 传递一个元组对象
    axis=1,  # axis=1表示列的方向
    join='outer',  # 外连接
)
print('ret:\n', ret)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

在这里插入图片描述

内连接

# 在列的方向上,直接合并!  在行的方向上,获取共同拥有的行!
ret = pd.concat(
    objs=(df1, df2),  # 传递一个元组对象
    axis=1,  # axis=1表示列的方向
    join='inner',  # 内连接
)
print('ret:\n', ret)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述

纵向堆叠(纵向合并)

外连接

# 在行的方向上,直接拼接 ---在列的方向上,获取所有的列  ------在没有值的地方,用NaN来填充!
ret = pd.concat(
    objs=(df1, df2),  # 传递一个元组对象
    axis=0,  # axis=1表示列的方向, axis=0表示行的方向
    join='outer',  # 外连接
    sort=True,	# pandas的sort参数表示是否需要按照连接轴的索引进行排序,sort=True表示按索引进行排序,sort=False则表示不按索引进行排序
)
print('ret:\n', ret)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

在这里插入图片描述

内连接

# 在行的方向上,直接拼接 ---在列的方向上,获取共同拥有的列!
ret = pd.concat(
    objs=(df1, df2),  # 传递一个元组对象
    axis=0,  # axis=1表示列的方向, axis=0表示行的方向
    join='inner',  # 外连接
    sort=True,
)
print('ret:\n', ret)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

在这里插入图片描述

使用append()方法 来进行纵向合并

ret = df1.append(df2, sort=True)
print('ret:\n', ret)
  • 1
  • 2

其效果和 pd.concat的 纵向合并外连接 效果是一样的!
在这里插入图片描述

主键合并

类似于sql的 外键连接,使用外键将多个 表格连接到一起

当左右两边存在相同的列时:

在这里插入图片描述

外连接

ret = pd.merge(
    left=df1,  # 左边的DataFrame
    right=df2,  # 右边的DataFrame
    on='key',  # 指定连接的外键
    how='outer',  # 外连接 ----以外键列所有的值作为连接键,如果没有对应值的位置使用NaN来填充
)
print('ret:\n', ret)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述

内连接

ret = pd.merge(
    left=df1,  # 左边的DataFrame
    right=df2,  # 右边的DataFrame
    on='key',  # 指定连接的外键
    how='inner',  # 内连接 ----以外键列共同拥有的值作为连接键!
)
print('ret:\n', ret)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述

左连接

ret = pd.merge(
    left=df1,  # 左边的DataFrame
    right=df2,  # 右边的DataFrame
    on='key',  # 指定连接的外键
    how='left',  # 左(外)连接 ----以左边的DataFrame的外键列的所有值来作为链接键,用右边的DataFrame来匹配,如果没有值能匹配上,用NaN来填充
)
print('ret:\n', ret)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述

右连接

ret = pd.merge(
    left=df1,  # 左边的DataFrame
    right=df2,  # 右边的DataFrame
    on='key',  # 指定连接的外键
    how='right',  # 右(外)连接 ----以右边的DataFrame的外键列的所有值来作为链接键,用左边的DataFrame来匹配,如果没有值能匹配上,用NaN来填充
)
print('ret:\n', ret)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述

当外键中有重复的值时

在这里插入图片描述

ret = pd.merge(
    left=df1,  # 左边的DataFrame
    right=df2,  # 右边的DataFrame
    on='key',  # 指定连接的外键
    how='outer',  # 外连接 ----以外键列所有的值作为连接键,如果没有对应值的位置使用NaN来填充
)
print('ret:\n', ret)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述

当 外键的列的名称不同,但是列内部的数据相同时

在这里插入图片描述

ret = pd.merge(
    left=df3,  # 左边的DataFrame
    right=df4,  # 右边的DataFrame
    left_on='Kx',  # 指定的是左边的外键列
    right_on='Ky',  # 指定的是右边的外键列
    how='outer',  # 外连接 \ inner --内连接   \ left ---左(外)连接 \ right --有(外)连接
)
print('ret:\n', ret)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

在这里插入图片描述

当左右的两个DataFrame存在同名的列,但是该列不是外键时

在这里插入图片描述

可以使用suffixes参数加以区分(默认为 ("_x", “_y”) )

ret = pd.merge(
    left=df3,  # 左边的DataFrame
    right=df5,  # 右边的DataFrame
    left_on='Kx',  # 指定的是左边的外键列
    right_on='Ky',  # 指定的是右边的外键列
    how='outer',  # 外连接 \ inner --内连接   \ left ---左(外)连接 \ right --有(外)连接
    suffixes=('_I', '_II'),  # 当左边存在同名的列,但是该列不是外键时,需要用到该参数加以区分!
)
print('ret:\n', ret)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

在这里插入图片描述

当左右两边存在多列外键时

在这里插入图片描述

ret = pd.merge(
    left=df6,  # 左边的DataFrame
    right=df7,  # 右边的DataFrame
    on=['kk', 'kg'],  # 指定链接的多个外键
    how='outer',  # 外连接 \ inner --内连接   \ left ---左(外)连接 \ right --有(外)连接
)
print('ret:\n', ret)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述

当两边存在多个外键列,并且外键列的列名不同,但是里面的值相同

在这里插入图片描述

ret = pd.merge(
    left=df6,  # 左边的DataFrame
    right=df7,  # 右边的DataFrame
    left_on=['k', 'g'],  # 指定的是左边的外键列
    right_on=['kk', 'kg'],  # 指定的是右边的外键列
    how='outer',  # 外连接 \ inner --内连接   \ left ---左(外)连接 \ right --有(外)连接
)
print('ret:\n', ret)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

在这里插入图片描述

使用DataFrame.join()方法进行数据合并

在这里插入图片描述

ret = df6.join(df7)
print("ret:\n", ret)	
  • 1
  • 2

在这里插入图片描述

重叠合并

数据分析和处理过程中若出现两份数据的内容几乎一致的情况,但是某些特征在其中一 张表上是完整的,而在另外一张表上的数据则是缺失的时候,可以用 combine_first 方法进行 重叠数据合并。

用一张表–去重叠另外一张表—前提:结构类似!

在这里插入图片描述
使用df2来重叠 df1中缺失的部分

ret = df1.combine_first(df2)
print('ret:\n', ret)
  • 1
  • 2

在这里插入图片描述

填充的规则:

  • df1中没有值的位置,使用df2中对应位置的值来填;
  • df1中有值的位置,df2是填不了的;
  • df1中没有值的位置,df2对应位置也没有值,那么无法填充
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/69716
推荐阅读
相关标签
  

闽ICP备14008679号