You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于共同EMP_ID列合并多个CSV文件(避免重复列)

解决多CSV按共同EMP_ID合并去重问题

问题说明

你有多个结构不同但都包含EMP_ID列的CSV文件,希望合并成一个包含所有列的文件,但使用pd.concat(axis=1)后出现EMP_ID重复的情况。

原始文件内容

文件1 (file_1.csv)

EMP_IDEMP_nameEMP_Service
33a6
44b3
12c1
16d10
10e25

文件2 (file_2.csv)

EMP_IDEMP_age
3330
4429
1227
1645
1050

文件3 (file_3.csv)

EMP_IDEMP_dept
33xyz
44abc
12lmn
16abc
10lmn

期望输出 (cat_vars.csv)

EMP_IDEMP_nameEMP_ageEMP_ServiceEMP_dept
33a306xyz
44b293abc
12c271lmn
16d4510abc
10e5025lmn

错误原因

你使用的pd.concat([df1, df2, df3], axis=1)是按列直接拼接,每个DataFrame都自带EMP_ID列,所以最终结果会出现多个重复的EMP_ID列。这种方法适用于列结构完全一致的DataFrame行拼接,或者列无重叠的列拼接,但不适合按共同键关联合并的场景。

正确解决方案

我们需要通过EMP_ID作为关联键,将多个DataFrame进行横向合并,可以用pd.merge方法,或者用functools.reduce批量合并多个文件:

方法1:逐次merge合并

import pandas as pd

# 读取文件
df1 = pd.read_csv(r'file_1.csv')
df2 = pd.read_csv(r'file_2.csv')
df3 = pd.read_csv(r'file_3.csv')

# 按EMP_ID合并,默认是内连接(保留所有匹配的行)
merged_df = df1.merge(df2, on='EMP_ID').merge(df3, on='EMP_ID')

# 保存结果
merged_df.to_csv('cat_vars.csv', index=False)

方法2:批量合并(适合更多文件的场景)

如果有更多CSV文件,可以用functools.reduce来批量合并,避免重复写merge:

import pandas as pd
from functools import reduce
import glob

# 获取所有CSV文件路径
csv_files = glob.glob('file_*.csv')

# 读取所有文件为DataFrame列表
df_list = [pd.read_csv(file) for file in csv_files]

# 按EMP_ID批量合并所有DataFrame
merged_df = reduce(lambda left, right: pd.merge(left, right, on='EMP_ID'), df_list)

# 保存结果
merged_df.to_csv('cat_vars.csv', index=False)

说明

  • merge的on参数指定关联的共同列EMP_ID,默认是内连接(只保留所有文件中都存在的EMP_ID对应的行)。
  • 如果需要保留所有EMP_ID(即使某个文件中没有对应数据),可以添加how='outer'参数,缺失值会用NaN填充。

内容的提问来源于stack exchange,提问作者Shourya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 03:05:27