pandas 数据合并和匹配

119 阅读2分钟

启动jupyter notebook

# 激活虚拟环境
source myenv/bin/activate

# 启动虚拟环境
jupyter notebook



在数据清洗过程中,常常需要将来自不同来源的数据进行合并或匹配,以构建完整的分析数据集。Pandas提供了强大的数据合并与匹配功能。

concat 数据合并

使用 pandas 的 concat() 方法可以将两个数据集进行垂直拼接 或 水平拼接。

import pandas as pd

df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
df2 = pd.DataFrame({'A': [5, 6], 'B': [7, 8]})
df3 = pd.DataFrame({'A': [9, 10], 'B': [11, 12]})

# 垂直堆叠 (axis默认为0,可以不写)
df_concat = pd.concat([df1, df2, df3])
print("垂直拼接:\n")
print(df_concat)

# 水平堆叠
df_concat = pd.concat([df1, df2, df3], axis=1)
print("\n\n水平拼接:\n")
print(df_concat)

运行结果:

image.png



merge 数据匹配


需求:按区县列,将邮政编码表中的邮政编码匹配到人员信息表中,作为新的列。

image.png


使用Pandas库的merge方法进行数据匹配时(似于SQL中的JOIN操作),on参数是用来指定两个数据框(DataFrame)中用于连接的列名,how参数指定连接的方式。

其中how="left"表示进行左连接,它会保留左侧数据框(df_人员信息)的所有行,如果右侧数据框(df_邮政编码)中有匹配的行,则会将这些行的信息添加到结果中,如果没有匹配的行,则相应的列会填充为 NaNhow="right"表示进行右连接

import pandas as pd

# 读取文件
df_人员信息 = pd.read_excel("/Users/xxx/Desktop/人员信息.xlsx", sheet_name="Sheet1")
df_邮政编码 = pd.read_excel("/Users/xxx/Desktop/邮政编码.xlsx", sheet_name="Sheet1")

# 合并数据框,只保留需要的列
result = df_人员信息.merge(df_邮政编码, on="区县", how="left")

# 保存到新的Excel文件
result.to_excel('/Users/xxx/Desktop/人员信息(补).xlsx', index=False)

运行结果:

image.png

如果只想匹配指定的行,而不是所有行。代码如下⬇️

import pandas as pd

# 读取文件
df_人员信息 = pd.read_excel("/Users/xxx/Desktop/人员信息.xlsx", sheet_name="Sheet1")
df_邮政编码 = pd.read_excel("/Users/xxx/Desktop/邮政编码.xlsx", sheet_name="Sheet1")

# 合并数据框,只保留需要的列
result = df_人员信息.merge(df_邮政编码[["邮政编码", "区县"]], on="区县", how="left")

# 保存到新的Excel文件
result.to_excel('/Users/xxx/Desktop/人员信息(补).xlsx', index=False)

运行结果:

image.png