Pandas 2.x中read_excel()替代mangle_dup_cols的方案
解决Pandas 2.x读取Excel重复列名自动加后缀的问题
这里有几个比手动设列名更优雅的办法,不用改Excel也不用降级Pandas:
方法1:用openpyxl直接获取原始列名
绕过Pandas的列名处理逻辑,直接从Excel单元格读取原始表头,再给DataFrame赋值:
from openpyxl import load_workbook import pandas as pd # 加载目标工作簿和工作表 wb = load_workbook("workbook.xlsx") ws = wb["Sheet1"] # 提取B1到E1的原始列名 original_cols = [cell.value for cell in ws["B1":"E1"][0]] # 读取数据区域(跳过表头行) df = pd.read_excel( "workbook.xlsx", sheet_name="Sheet1", usecols="B:E", skiprows=1, nrows=2 ) # 设置列名,保留重复 df.columns = original_cols
这个方法最稳妥,不管列名重复多少次,都能完美还原原始表头。
方法2:读取后批量还原列名
如果重复列名的后缀都是.1、.2这类规律格式,读取完成后直接去掉后缀即可:
import pandas as pd df = pd.read_excel( "workbook.xlsx", sheet_name="Sheet1", header=0, usecols="B:E", nrows=2 ) # 移除列名末尾的数字后缀 df.columns = [col.split('.')[0] if '.' in col else col for col in df.columns]
注意:如果原始列名本身包含小数点,这个方法会误删点后的内容,只适合列名不含小数点的场景。
内容的提问来源于stack exchange,提问作者Paul
相关产品推荐
相关产品推荐

