如何用Pandas读取含重复列名的Excel并保留原列名转CSV
保留重复列名的Excel转CSV实现
问题场景
我的Excel表头包含重复列名,示例如下:
DATE,FIELD1,FEEDER BRANCH,50,100,200,500,1000,2000,FIELD2,50,100,200,500,1000,2000,FIELD3,50,100,200,500,1000,2000
用Pandas加载时,重复列会被自动添加数字后缀(比如50变成50.1),转存为CSV后表头就和原Excel不一致了。我需要修改代码,让加载和导出时都保留原始表头。
原代码如下:
def pandas_csv_from_excel(source): dir_and_file = source.split('/') filename = dir_and_file[len(dir_and_file) - 1].split('.') if not ((filename[1]).lower().startswith('xls')): return source csv_filename = f"{os.path.join(os.path.dirname(source), filename[0].lower())}.csv" location = os.path.dirname(source) df = pd.read_excel(source, index_col=None) df.to_csv(csv_filename, index=None) return csv_filename
修改方案
只需在pd.read_excel中添加mangle_dupe_cols=False参数,禁用重复列名的自动重命名,同时显式指定表头行,就能保留原始列名。
修改后的完整代码:
import os import pandas as pd def pandas_csv_from_excel(source): dir_and_file = source.split('/') filename = dir_and_file[-1].split('.') if not filename[1].lower().startswith('xls'): return source csv_filename = os.path.join(os.path.dirname(source), f"{filename[0].lower()}.csv") # 禁用重复列名自动添加后缀,保留原始表头 df = pd.read_excel(source, index_col=None, header=0, mangle_dupe_cols=False) df.to_csv(csv_filename, index=None) return csv_filename
关键说明
mangle_dupe_cols=False:Pandas默认会给重复列名加.1、.2这类后缀,设置该参数为False就能完全保留原始列名。- 显式设置
header=0:确保第一行被识别为表头,避免因文件格式问题导致表头读取异常。 - 顺带优化了原代码的索引获取:用
dir_and_file[-1]替代dir_and_file[len(dir_and_file)-1],代码更简洁。
内容的提问来源于stack exchange,提问作者leoOrion
相关产品推荐
相关产品推荐

