Python中表格合并的方法以及分别适用的情况

在pandas中,合并表格的方法主要有以下几种,每种方法适用于不同的情况:

  1. pd.concat()

    • 适用情况: 当需要将多个DataFrame在行或列方向上进行简单的拼接时。
    • 用法:
      pd.concat([df1, df2], axis=0)  # 按行拼接
      pd.concat([df1, df2], axis=1)  # 按列拼接
      
  2. pd.merge()

    • 适用情况: 当需要根据一个或多个键将两个DataFrame进行合并时,类似于SQL中的JOIN操作。
    • 用法:
      pd.merge(df1, df2, on='key')  # 按单个键合并
      pd.merge(df1, df2, on=['key1', 'key2'])  # 按多个键合并
      pd.merge(df1, df2, left_on='key1', right_on='key2')  # 左右DataFrame的键不同
      
    • 类型:
      • how='inner' (默认): 内连接
      • how='outer': 外连接
      • how='left': 左连接
      • how='right': 右连接
  3. df.join()

    • 适用情况: 当需要根据索引将两个DataFrame进行合并时,通常用于连接列数较少的DataFrame。
    • 用法:
      df1.join(df2)  # 按索引合并
      df1.join(df2, on='key')  # 指定键进行合并
      
    • 类型:
      • how='left' (默认): 左连接
      • how='right': 右连接
      • how='outer': 外连接
      • how='inner': 内连接
  4. df.append()

    • 适用情况: 当需要将一个DataFrame的行添加到另一个DataFrame的末尾时。
    • 用法:
      df1.append(df2)
      

完整示例

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]
})

# 1. 使用pd.concat()按行拼接
result_concat = pd.concat([df1, df2], axis=0)

# 2. 使用pd.merge()按键合并
result_merge = pd.merge(df1, df2, on='key', how='inner')

# 3. 使用df.join()按索引合并
df1.set_index('key', inplace=True)
df2.set_index('key', inplace=True)
result_join = df1.join(df2, how='inner')

# 4. 使用df.append()添加行
result_append = df1.reset_index().append(df2.reset_index(), ignore_index=True)

补充说明

左连接、右连接、外连接和内连接是数据表合并中的不同类型,主要用于确定在合并过程中保留哪些记录。它们的定义和区别如下:

  1. 左连接 (Left Join):

    • 定义: 左连接保留左表(第一个表)中的所有记录,以及右表(第二个表)中与左表匹配的记录。对于左表中没有匹配的右表记录,会在右表的列中填充NaN。

    • 示意图:

      左表: A, B, C
      右表:   B, C, D
      
      左连接结果: A, B, C, D(空)
      
  2. 右连接 (Right Join):

    • 定义: 右连接保留右表(第二个表)中的所有记录,以及左表(第一个表)中与右表匹配的记录。对于右表中没有匹配的左表记录,会在左表的列中填充NaN。

    • 示意图:

      左表: A, B, C
      右表:   B, C, D
      
      右连接结果: (空)A, B, C, D
      
  3. 外连接 (Outer Join):

    • 定义: 外连接保留左表和右表中的所有记录。不匹配的部分在相应的列中填充NaN。

    • 示意图:

      左表: A, B, C
      右表:   B, C, D
      
      外连接结果: A, B, C, D
      
  4. 内连接 (Inner Join):

    • 定义: 内连接仅保留两个表中都存在的匹配记录,不匹配的部分会被过滤掉。

    • 示意图:

      左表: A, B, C
      右表:   B, C, D
      
      内连接结果: B, C
      

示例代码

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]
})

# 1. 左连接
left_join = pd.merge(df1, df2, on='key', how='left')
print("左连接结果:\n", left_join)

# 2. 右连接
right_join = pd.merge(df1, df2, on='key', how='right')
print("右连接结果:\n", right_join)

# 3. 外连接
outer_join = pd.merge(df1, df2, on='key', how='outer')
print("外连接结果:\n", outer_join)

# 4. 内连接
inner_join = pd.merge(df1, df2, on='key', how='inner')
print("内连接结果:\n", inner_join)

输出结果

左连接结果:
   key  value1  value2
0    A       1     NaN
1    B       2     4.0
2    C       3     5.0

右连接结果:
   key  value1  value2
0    B     2.0       4
1    C     3.0       5
2    D     NaN       6

外连接结果:
   key  value1  value2
0    A     1.0     NaN
1    B     2.0     4.0
2    C     3.0     5.0
3    D     NaN     6.0

内连接结果:
   key  value1  value2
0    B       2       4
1    C       3       5
  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值