You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用pandas read_excel读取多级表头+日期列Excel文件报错求助

解决pandas读取多级表头Excel时parse_dates的KeyError问题

首先,咱们来搞清楚为什么会报错:当你用header=[0,1]读取Excel时,DataFrame的列名会变成多级索引(MultiIndex),而read_excelparse_dates参数在直接传入多级列名的元组时,识别逻辑可能会出问题,导致找不到对应的列,从而抛出KeyError

这里给你几个可行的解决办法:

方法一:读取后再转换日期(最稳妥推荐)

先不指定parse_dates,完整读取数据后,再用pd.to_datetime精准转换目标多级列:

# 先读取带多级表头的Excel
df = pd.read_excel(fileName, sheet_name=sheetNm, header=[0,1])
# 转换指定的多级列为日期格式
df[('start_date', '(*)Start')] = pd.to_datetime(df[('start_date', '(*)Start')])

这种方式逻辑清晰,也能避免read_excel对多级列名的识别问题。

方法二:用列位置代替列名指定

如果你想在读取时就完成日期解析,可以先确认目标日期列在Excel中的位置(从0开始计数),然后把位置传给parse_dates

# 假设目标日期列是第3列(索引为2)
df = pd.read_excel(fileName, sheet_name=sheetNm, header=[0,1], parse_dates=[2])

这种方式绕过了列名识别的问题,适合列位置固定的场景。

方法三:确认多级列名的准确性

先打印读取后的列名,检查是否和你指定的元组完全一致:

df = pd.read_excel(fileName, sheet_name=sheetNm, header=[0,1])
print(df.columns)

看看输出里有没有拼写错误、额外空格或者大小写差异——比如你写的('start_date', '(*)Start'),要确保第一行表头确实是start_date,第二行是(*)Start,没有任何偏差。

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

火山引擎 最新活动