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

Python pandas列转行时出现TypeError报错的原因及解决方法

错误原因

你在构建DataFrame时传入的columns参数是嵌套列表结构,导致最终得到的DataFrame列索引为多层索引(MultiIndex),而非你预期的单层文本索引。你调用melt、set_index时传入的列名是普通字符串,无法匹配多层索引结构,因此抛出类型错误。
你可以执行print(df.columns)验证这一点,输出会显示类似以下的多层索引结构:

MultiIndex([('Tahun',),
            ('Jan',),
            ('Feb',),
            ...
            ('Nov',)],
           )
解决方法

方案1:从数据生成环节修复(推荐)

你爬取表头的代码中,column_变量是列表嵌套列表的结构,原因是table.find_all('thead')返回的结果只有一个thead元素,你循环时把每一组表头都作为子列表append到了column_中,只需要在构建DataFrame时取column_的第一个元素即可:

# 把原来的df构建代码替换成下面这行
df = pd.DataFrame(output, columns=column_[0])

修复后你原来写的melt、stack转换代码都可以正常运行,直接得到你需要的长表结构。

方案2:对已生成的DataFrame修复列索引

如果你不想修改爬取代码,也可以直接把已有的多层列索引压平为单层:

# 压平列索引
df.columns = df.columns.get_level_values(0)
# 执行melt转换
result = df.melt(id_vars=["Tahun"], var_name="Month", value_name="Value")
# 按年份、月份排序可选
result = result.sort_values(["Tahun", "Month"], ignore_index=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 15:18:00