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

Pandas合并目录文件时如何为缺失键值填充NaN?

解决多文件合并时缺失键的NaN填充问题

我懂你遇到的问题了——合并目录里的多个文件时,有些键在部分文件里找不到对应值,想要自动填充NaN,但之前用pd.concat(axis=1)只能按列名生硬拼接,根本没处理缺失值的情况对吧?下面给你两种实用的解决方案,都是基于pandas实现的:

方法1:设置共同键为索引后用pd.concat批量合并

这个方法适合一次性处理多个文件,核心是让所有DataFrame都以你的共同键(比如id)作为索引,这样pd.concat会自动按索引对齐,缺失的位置自动填充NaN。

步骤&示例代码

import pandas as pd
import os

# 1. 获取目录下所有目标文件(这里假设是csv格式,你可以改成对应格式)
file_list = [f for f in os.listdir("./") if f.endswith(".csv")]

# 2. 批量读取文件,统一设置共同键为索引
df_list = []
for file in file_list:
    df = pd.read_csv(file, index_col="id")  # 把你的共同键替换成实际列名,比如'id'
    df_list.append(df)

# 3. 按列合并,outer模式保留所有键,缺失值填充NaN
merged_df = pd.concat(df_list, axis=1, join="outer")

# 可选:把索引重新转为普通列,方便后续处理
merged_df.reset_index(inplace=True)

print(merged_df)

方法2:用pd.merge逐个外连接合并

如果文件数量不多,或者你更习惯用键匹配的方式,可以用merge的**外连接(outer join)**模式,每次合并都保留所有键,缺失值自动补NaN。

示例代码(两个文件)

import pandas as pd

# 读取两个文件
df1 = pd.read_csv("file1.csv")
df2 = pd.read_csv("file2.csv")

# 基于共同键外连接合并,自动填充NaN
merged_df = pd.merge(df1, df2, on="id", how="outer")

print(merged_df)

批量合并多文件的循环写法

import pandas as pd
import os

file_list = [f for f in os.listdir("./") if f.endswith(".csv")]

# 初始化合并结果为第一个文件的DataFrame
merged_df = pd.read_csv(file_list[0])

# 循环合并剩余文件
for file in file_list[1:]:
    temp_df = pd.read_csv(file)
    merged_df = pd.merge(merged_df, temp_df, on="id", how="outer")

print(merged_df)

为什么你之前的pd.concat没生效?

你之前用的pd.concat(data, axis=1, ignore_index=False),问题在于没有让DataFrame基于共同键对齐——如果你的DataFrame没有把共同键设为索引,concat只会按行的位置顺序拼接,而不是按键去匹配。只要把共同键设置为索引,再配合join="outer"参数,就能实现自动填充NaN的需求了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:40:46