Pandas 11-多表联合

基本概念

  • DataFrame: 一个二维的表格数据结构,类似于电子表格或 SQL 表。
  • join: 将两个 DataFrame 按照某个共同的列(键)进行合并。

常见的 join 类型

  1. inner join: 只保留两个 DataFrame 中键匹配的行。
  2. left join: 保留左边 DataFrame 的所有行,右边 DataFrame 中没有匹配的行用 NaN 填充。
  3. right join: 保留右边 DataFrame 的所有行,左边 DataFrame 中没有匹配的行用 NaN 填充。
  4. outer join: 保留两个 DataFrame 中的所有行,没有匹配的行用 NaN 填充。

使用方法

Pandas 提供了 mergejoin 两种方法来进行表的合并。

使用 merge 方法
import pandas as pd  
  
# 创建示例 DataFrame  
df1 = pd.DataFrame({'key': ['A', 'B', 'C'], 'value1': [1, 2, 3]})  
df2 = pd.DataFrame({'key': ['B', 'C', 'D'], 'value2': [4, 5, 6]})  
  
# inner join  
result_inner = pd.merge(df1, df2, on='key', how='inner')  
  
# left join  
result_left = pd.merge(df1, df2, on='key', how='left')  
  
# right join  
result_right = pd.merge(df1, df2, on='key', how='right')  
  
# outer join  
result_outer = pd.merge(df1, df2, on='key', how='outer')  
使用 join 方法

join 方法默认是基于索引进行合并,但也可以通过 on 参数指定列。

# 创建示例 DataFrame  
df1 = pd.DataFrame({'value1': [1, 2, 3]}, index=['A', 'B', 'C'])  
df2 = pd.DataFrame({'value2': [4, 5, 6]}, index=['B', 'C', 'D'])  
  
# inner join  
result_inner = df1.join(df2, how='inner')  
  
# left join  
result_left = df1.join(df2, how='left')  
  
# right join  
result_right = df1.join(df2, how='right')  
  
# outer join  
result_outer = df1.join(df2, how='outer')  

多表联合 join

当需要将多个 DataFrame 进行联合 join 时,可以多次调用 mergejoin 方法。

# 创建示例 DataFrame  
df1 = pd.DataFrame({'key': ['A', 'B', 'C'], 'value1': [1, 2, 3]})  
df2 = pd.DataFrame({'key': ['B', 'C', 'D'], 'value2': [4, 5, 6]})  
df3 = pd.DataFrame({'key': ['C', 'D', 'E'], 'value3': [7, 8, 9]})  
  
# 先合并 df1 和 df2,再合并结果与 df3  
result = pd.merge(pd.merge(df1, df2, on='key', how='outer'), df3, on='key', how='outer')  

注意事项

  1. 键的名称: 确保两个 DataFrame 中用于合并的列名称相同。
  2. 数据类型: 确保用于合并的列数据类型一致,避免因数据类型不匹配导致的合并错误。
  3. 性能: 对于大数据集,考虑使用更高效的数据库或优化 Pandas 操作。
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

司南锤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值