Python如何将多个CSV文件的指定列合并为含公共时间列的单个文件
问题解决思路与实现代码
你之前代码的核心错误
- 使用
append和pd.concat时指定了axis=0,该参数代表按行纵向堆叠,自然只会得到2列的结果 pd.merge仅支持同时合并2个DataFrame,需要分别传入left和right参数,不能直接传入包含多个DataFrame的列表
最优实现方案
我们可以先读取第一个文件保留t列,之后依次读取其他文件,仅保留X_ch2列并重命名区分不同文件,最后横向拼接所有列即可,代码如下:
import pandas as pd import glob # 匹配所有目标文件 all_files = glob.glob("Cam_Cantera_IDT_output_800K_*.csv") require_cols = ['t', 'X_ch2'] # 先读取第一个文件作为基础 combined_df = pd.read_csv(all_files[0], usecols=require_cols) # 重命名第一个文件的X_ch2列,避免后续重名 combined_df = combined_df.rename(columns={'X_ch2': f'X_ch2_{all_files[0].split("_")[-1].split(".")[0]}'}) # 遍历剩余文件 for f in all_files[1:]: # 读取当前文件,只保留X_ch2列 df = pd.read_csv(f, usecols=['X_ch2']) # 重命名X_ch2列,用文件名中的编号区分,比如X_ch2_7401 file_id = f.split("_")[-1].split(".")[0] df = df.rename(columns={'X_ch2': f'X_ch2_{file_id}'}) # 横向拼接到总表 combined_df = pd.concat([combined_df, df], axis=1) # 输出结果,此时总列数=1个t列+48个X_ch2列=49列 combined_df.to_csv("combined_X_ch2.csv", index=False)
代码说明
- 读取第一个文件时保留完整的
t列和对应X_ch2列,并重命名X_ch2列加入文件编号区分 - 遍历后续文件时仅读取
X_ch2列,同样按文件编号重命名后横向拼接(axis=1) - 因为所有文件的
t列完全一致,不需要重复读取拼接,最终结果天然只有1个t列
内容的提问来源于stack exchange,提问作者AVK
相关产品推荐
相关产品推荐

