如何合并多份列名不同的CSV文件且保留原有列名?
问题原因
你使用的pd.concat()方法中设置了ignore_index=True参数,当沿列方向(axis=1)合并数据时,该参数会强制重置列索引,直接覆盖所有CSV文件的原有列名,替换为从0开始的数字序列,这是你遇到问题的核心原因。
修改方案
仅需要删除pd.concat()中的ignore_index=True参数即可保留原有列名,同时建议在导出CSV时添加index=False参数,避免生成多余的行号列,修改后代码如下:
import os, glob import pandas as pd path = "" all_files = glob.glob(os.path.join(path, "*.csv")) df_from_each_file = (pd.read_csv(f, sep=',') for f in all_files) df_merged = pd.concat(df_from_each_file, axis=1) df_merged.to_csv("merged.csv", index=False)
补充场景(可选)
如果后续存在不同CSV文件列名重复的情况,可以在读取文件时给每个文件的列添加对应文件名前缀,避免列名冲突,参考代码如下:
import os, glob import pandas as pd path = "" all_files = glob.glob(os.path.join(path, "*.csv")) df_list = [] for f in all_files: df = pd.read_csv(f, sep=',') # 提取无后缀的文件名作为列前缀 file_base_name = os.path.splitext(os.path.basename(f))[0] df = df.add_prefix(f"{file_base_name}_") df_list.append(df) df_merged = pd.concat(df_list, axis=1) df_merged.to_csv("merged.csv", index=False)
内容的提问来源于stack exchange,提问作者saeede
相关产品推荐
相关产品推荐

