详解pandas.DataFrame.merge()(合并数据框)函数使用方法

  • Post category:Python

pandas.DataFrame.merge()是一种用于将两个或多个数据框(pandas DataFrame)中的行(row)或列(column)按照一定的规则合并(combine)起来的函数。下面我们详细讲解这个函数的作用与使用方法。

作用

pandas.DataFrame.merge()函数主要用于以下情况:

  1. 结合两个或多个数据帧中的重复列。
  2. 结合两个或多个数据帧中的非重复列。
  3. 合并两个或多个数据帧中的行。
  4. 按照给定的索引合并两个或多个数据帧。

使用方法

pandas.DataFrame.merge()的基本语法如下:

DataFrame.merge(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)

这里对每个参数作详细解释:

  • right:一个数据帧,表示用于合并的第二个数据帧。
  • how:指定合并方式,可选的取值有:'inner''outer''left''right'。默认为'inner',表示保留两个数据帧的交集,其余的取值(例如:'outer')表示保留两个数据帧的并集。
  • on:指定用于合并的列名,可选参数。默认为None,表示以两个数据帧的共同列进行合并,如果两个数据帧没有共同列,则会抛出异常。如果指定了on参数,则以指定列名进行合并,必须存在于两个数据帧的列中。
  • left_onright_on:分别指定第一个数据帧和第二个数据帧用于合并的列名。
  • left_indexright_index:分别指定是否以第一个数据帧和第二个数据帧的索引(Index)进行合并,默认为False
  • suffixes:指定列名后缀字符串的元组,以区分在两个数据帧中存在同名列时的列名。默认为('_x', '_y'),例如,如果有一个名为name的列,数据帧中两个表都存在,则合并后的列将分别被重命名为name_xname_y

下面给出两个使用实例:

实例一:合并两个数据帧

import pandas as pd

# 创建第一个数据帧
df1 = pd.DataFrame({'id': [1, 2, 3], 'name': ['A', 'B', 'C'], 'age':[20, 22, 24]})
# 创建第二个数据帧
df2 = pd.DataFrame({'id': [1, 2, 4], 'address': ['Beijing', 'Shanghai', 'Guangzhou'], 'salary':[10000, 12000, 15000]})
# 使用id列合并两个数据帧
result = pd.merge(df1, df2, on='id', how='outer')
print(result)

输出结果如下:

   id name  age    address   salary
0   1    A  20     Beijing  10000.0
1   2    B  22    Shanghai  12000.0
2   3    C  24        NaN      NaN
3   4  NaN NaN  Guangzhou  15000.0

实例二:使用多列合并

# 创建第一个数据帧
df1 = pd.DataFrame({'id': [1, 2, 3], 'name': ['A', 'B', 'C'], 'city':['Beijing', 'Shanghai', 'Guangzhou']})
# 创建第二个数据帧
df2 = pd.DataFrame({'id': [1, 2, 4], 'city': ['Beijing', 'Shanghai', 'Guilin'], 'salary':[10000, 12000, 15000]})
# 使用id和city两列合并两个数据帧
result = pd.merge(df1, df2, how='outer', on=['id', 'city'])
print(result)

输出结果如下:

   id name       city   salary
0   1    A    Beijing  10000.0
1   2    B   Shanghai  12000.0
2   3    C  Guangzhou      NaN
3   4  NaN     Guilin  15000.0