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
相关产品推荐
相关产品推荐

