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

Python使用pandas合并多文件列时出现NaN值的处理方法咨询

问题原因说明

出现大量NaN的核心原因是不同输入文件的t列(时间序列)的取值不完全一致。你设置了t为行索引后用pd.concat横向拼接时,默认采用外连接逻辑,只要某个时间值没有在某个文件中出现,对应位置就会填充NaN。
你不需要改用combine类函数,pd.concat本身就可以满足你的需求,只需要调整参数或补充缺失值处理逻辑即可,combine主要适用于两个DataFrame按自定义规则合并的场景,不适合当前多文件批量拼接的场景。

适配不同需求的解决方案
  • 方案1:仅保留所有文件共有的时间点,输出无空值
    只需要给pd.concat添加join='inner'参数,采用内连接逻辑,仅保留所有文件都存在的时间索引行,最终结果不会出现NaN。
    同时你原代码中列名重命名的逻辑存在小问题:os.path.basename('X_ch2_'+f)会先拼接前缀再取文件名,导致前缀丢失,应该调整为先取文件名再加前缀。
    修改后的完整代码如下:

    import glob
    import pandas as pd
    import os
    
    file_extension = 'Cam_Cantera_IDT_output_800K_*.csv'
    all_filenames = [i for i in glob.glob(f"*{file_extension}")]
    
    require_cols = ['t', 'X_ch2']
    
    # 修正列重命名逻辑
    L = [pd.read_csv(f, usecols = require_cols, index_col=['t'])['X_ch2'].rename('X_ch2_'+os.path.basename(f)) for f in all_filenames]
    
    # 加join='inner'用内连接,仅保留共有时间点
    combined_csv_data = pd.concat(L, axis=1, join='inner')
    
    print(combined_csv_data)
    combined_csv_data.to_csv('combined_csv_data.csv')
    
  • 方案2:保留所有时间点,填充缺失值
    如果你需要保留所有文件的全部时间点,可以在拼接后用插值/前向填充等方式处理NaN,适合时间序列是连续采样的场景:

    # 先按外连接拼接保留所有时间点
    combined_csv_data = pd.concat(L, axis=1)
    # 线性插值填充缺失值,也可以替换为ffill()前向填充、bfill()后向填充、fillna(0)填0等逻辑
    combined_csv_data = combined_csv_data.interpolate(method='linear')
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 09:36:06