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

如何将含公共列的多个CSV文件合并为单个DataFrame

解决多CSV文件基于公共列合并的问题

你遇到的问题很常见——pd.concat是按行堆叠数据,而你需要的是基于公共列把不同文件的列横向合并到一起,所以才会出现部分列全NaN的情况。下面是正确的解决方法:

问题原因解释

pd.concat(map(pd.read_csv, filepaths), sort=False)会把所有CSV的行依次堆起来,每个CSV只有自己的专属列(比如file1有var1/2/3,file2有var4/5/6),所以当file1的行被堆叠后,var4/5/6列自然没有数据,就会填充NaN;同理file2的行堆叠后,var1/2/3列也是NaN。这显然不是你想要的“整合所有列到同一个DataFrame”的效果。

正确解决方案:按公共列合并(merge)

我们需要以common_col1和common_col2为匹配键,把每个CSV的数据横向合并到一起,确保相同的行能对应上所有文件的列。

步骤1:导入依赖库

import pandas as pd
import glob  # 用glob更方便匹配CSV文件

步骤2:获取所有CSV文件路径

用glob可以直接匹配指定目录下的所有CSV,比os.listdir更精准:

filepaths = glob.glob("/home/csvfiles/*.csv")

步骤3:逐步合并所有文件

先读取第一个文件作为基础,再依次和剩下的文件做合并:

# 初始化合并后的DataFrame
merged_df = pd.read_csv(filepaths[0])

# 遍历剩余文件并合并
for filepath in filepaths[1:]:
    # 读取当前CSV
    current_df = pd.read_csv(filepath)
    # 按公共列合并,how='outer'保留所有行(可根据需求调整)
    merged_df = pd.merge(
        merged_df,
        current_df,
        on=['common_col1', 'common_col2'],
        how='outer'  # 如果只保留所有文件都存在的行,改用how='inner'
    )

关键参数说明

  • on=['common_col1', 'common_col2']:指定用这两列作为匹配的主键,确保行能正确对应
  • how='outer':保留所有出现在任意CSV里的行,如果某行在某个CSV里没有数据,对应的列会填充NaN(这是合理的缺失值);如果只需要保留所有CSV都存在的行,换成how='inner'即可

验证结果

合并后的merged_df会包含所有CSV的列:common_col1、common_col2、var1、var2、var3、var4、var5、var6... 并且每个行对应的各列数据都会正确匹配,不会出现全NaN的列(除非某个列在所有文件里都没有对应行的数据,但这种情况很少)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:26:36