常见的多个DataFrame合并常用三个函数

pd.append()函数

  • 相同列名DataFrame按列合并
pd.DataFrame({'name':['k','s'],'age':[11,55]}).append(pd.DataFrame({'name':['kk','ss'],'age':[11,55]}),ignore_index=True)

下面是合并后的效果:

  • 不同列名DataFrame合并
pd.DataFrame({'na':['k','s'],'age':[11,55]}).append(pd.DataFrame({'name':['kk','ss'],'age':[11,55]}),ignore_index=True)

下面是合并效果:

pd.concat()函数

  • 相同列名行合并
df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
df2 = pd.DataFrame({'A': [5, 6], 'B': [7, 8]})
result = pd.concat([df1, df2])
result

等价于参数axis=0

result = pd.concat([df1, df2], axis=0)  # axis=0 表示沿着行(索引)合并
result

下面是合并效果:

  • 相同列名列合并
result = pd.concat([df1, df2], axis=1)  # axis=1 表示沿着列(索引)合并
result

下面是列名列合并效果:

  • 不同列名列合并
df3 = pd.DataFrame({'C': [9, 10]}, index=[1, 3])
result = pd.concat([df1, df3], axis=1,ignore_index=True)
result

concat函数比append函数好强大,有一点在于拥有相同index会自动合并同一行,而不是另外新增。

下面是合并效果:

  • keys参数使用
result = pd.concat([df1, df2], axis=0, keys=['df1', 'df2'])
result

下面是合并效果:

可以发现DataFrame前面多了df1和df2命名,这就是keys的作用。

pd.merge()函数

pd.merge()可以理解为类似于SQL语言的连接,先创建两个DateFrame,下面都是用key字段为关键字连接,不是参数哦。

df1 = pd.DataFrame({'key': ['A', 'B', 'C', 'D'], 'value': [1, 2, 3, 4]})
df1
df2 = pd.DataFrame({'key': ['B', 'D', 'E', 'F'], 'value': [5, 6, 7, 8]})
df2
df2
df2
df1
df1
  • 内连接
result = pd.merge(df1, df2, on='key')

等价于

result = pd.merge(df1, df2, on='key', how='inner')
result

how参数默认为inner,代码是将key相同的两个df合并起来,效果如下:

  • 左连接
result = pd.merge(df1, df2, on='key', how='left')
result

左连接效果如下:

  • 右连接
result = pd.merge(df1, df2, on='key', how='right')
result

右连接效果如下:

  • 全外连接
result = pd.merge(df1, df2, on='key', how='outer')
result

全外连接效果如下:

上面都是单个关键字进行连接,下面是多关键字连接。

  • 多关键字内连接
df1 = pd.DataFrame({'key1': ['A', 'B', 'C'], 'key2': ['A', 'B', 'C'], 'value': [1, 2, 3]})
df2 = pd.DataFrame({'key1': ['B', 'C', 'D'], 'key2': ['B', 'C', 'D'], 'value': [4, 5, 6]})

result = pd.merge(df1, df2, on=['key1', 'key2'])
result

下面是多关键字合并效果:

这是得到这个结果的原因是key1和key2公共值是B和C,以上都是在两个df有相同列名和公共值的基础。当列名不一致时,有什么合并办法呢?

  • 行内连接
df1 = pd.DataFrame({'value': [1, 2, 3]}, index=['A', 'B', 'C'])
df2 = pd.DataFrame({'value': [4, 5, 6]}, index=['B', 'C', 'D'])

result = pd.merge(df1, df2, left_index=True, right_index=True)
result

下面是连接后的效果:

可以发现只有行索引都为B和C的值被取出来了

  • 重复元素行合并获取
# 处理重复的列名:
df1 = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
df2 = pd.DataFrame({'A': [7, 8, 9], 'B': [4, 11, 12]})
#1 4 7 是因为都是第一行的,然后4是共同的。
result = pd.merge(df1, df2, on='B', suffixes=('_left', '_right'))
result

下面是实现效果:

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值