You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

堆叠含多级表头的Pandas DataFrame时遇TypeError问题求助

解决Pandas多级表头混合类型导致stack()报错的问题

你猜的没错!这个错误确实是因为二级表头混合了字符串和整数类型导致的——Pandas的stack()操作会尝试对列层级进行排序,而字符串和整数无法直接比较大小,所以才抛出了TypeError: '<' not supported between instances of 'str' and 'int'这个错误。

下面针对你的两种场景(手动创建DataFrame、从Excel读取DataFrame)给出具体的解决方案:

场景1:手动创建多级表头的DataFrame

如果是像示例里手动构建MultiIndex,你可以在创建时直接把二级表头的所有元素转为字符串:

import pandas as pd
# 创建时统一将二级表头元素转为字符串
multicol = pd.MultiIndex.from_tuples([('Car', str('Megane')), ('Car', str(5008))])
df = pd.DataFrame([[1, 2], [2, 4]], index=['Diesel', 'Escence'], columns=multicol)
# 现在执行stack()就不会报错了
stacked_df = df.stack()

如果已经创建好了DataFrame,也可以事后修改二级表头的类型:

# 针对已有的df,将二级列索引全部转为字符串
df.columns = df.columns.set_levels(df.columns.levels[1].astype(str), level=1)
# 执行stack操作
stacked_df = df.stack()

场景2:从Excel读取多级表头的DataFrame

对于从Excel导入的DataFrame,你可以在读取完成后直接处理列的MultiIndex:

import pandas as pd
# 读取Excel,header=[0,1]表示前两行是多级表头
df = pd.read_excel('your_excel_file.xlsx', header=[0,1])
# 把二级表头的所有元素转为字符串
df.columns = df.columns.set_levels(df.columns.levels[1].astype(str), level=1)
# 现在执行stack()操作就正常了
stacked_df = df.stack()

关键说明

set_levels()方法可以精准地修改MultiIndex中指定层级的元素类型:

  • level=1表示我们要修改的是二级表头(如果要修改一级表头,就用level=0)
  • astype(str)会把该层级的所有元素统一转为字符串类型,确保所有元素类型一致,避免排序时的类型冲突

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:30:33