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

为何read_html生成的DataFrame无法用.melt处理?报ValueError错误

问题原因与解决办法

核心报错原因

你遇到的ValueError本质是列名被设置成了多层索引(MultiIndex),而pd.melt无法处理非一维的列结构。问题出在这行代码:

cities.columns = [labels]

labels本身是一个一维列表,你额外套了一层[],导致DataFrame的列名变成了单层的MultiIndex(每个列的“名称”绑定了整个labels列表),而非普通的一维列名数组。这种情况下,后续调用melt时,pandas无法识别正确的列维度,就会抛出“每个列数组必须是一维”的错误。

另外还有一个细节问题:你设置的列名是小写的'city',但后续melt里写的是id_vars=['City'],大小写不匹配,即使前面的问题解决了,这里也会报错找不到对应列。

修正后的代码

import pandas as pd

cities = pd.read_html("assets/wikipedia_data.html", skiprows=1)
cities = cities[0].dropna(axis=0, thresh=4)
labels=['city',2,3,4,5,6,7,8,9,10,11,12]
# 去掉外层[],直接用labels设置一维列名
cities.columns = labels
cols=[1,2,3,4,9]
cities.drop(cities.columns[cols], axis=1, inplace=True)
# 用小写的'city'匹配列名
cities = cities.melt(id_vars=['city'])

补充说明

pd.read_html返回的DataFrame本身没有特殊特性,和普通DataFrame行为完全一致。你的测试数据集能正常运行,是因为测试时的列名设置是正确的一维结构,没有误创建MultiIndex。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 11:57:16