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

Pandas melt函数var_name参数不支持列表类型报错解决

问题原因

你对pandas.melt的参数用法理解有误,才会触发报错:

  • var_name参数的作用是:指定宽转长后,存储原列名的新列的列名,只接受字符串类型值,不接受列表
  • 你想指定要被转成长格式的A/B/C三列,这个列表应该传给value_vars参数,而不是var_name
正确实现代码
import pandas as pd
df = pd.DataFrame(data=[['USA', 'Bob', 200, 300, 400],
                        ['Canada', 'Alice', 100, 200, 300]],
                  columns=['Country', 'Person', 'A', 'B', 'C'])

result = df.melt(
    id_vars=['Country', 'Person'], # 保留不拆分的标识列
    value_vars=['A', 'B', 'C'],    # 指定需要转成多行的宽列
    var_name='Label',              # 原列名存入Label列
    value_name='Count'             # 原单元格值存入Count列
)

# 如果需要和你给出的示例行顺序完全一致,加一行排序重置索引即可
result = result.sort_values(
    by=['Country', 'Person', 'Label'], 
    ascending=[False, True, True]
).reset_index(drop=True)
运行结果

执行后输出的result和你预期的结构完全一致:

Country Person Label  Count
0     USA    Bob     A    200
1     USA    Bob     B    300
2     USA    Bob     C    400
3  Canada  Alice     A    100
4  Canada  Alice     B    200
5  Canada  Alice     C    300

补充说明:如果不手动指定value_vars参数,melt默认会把所有不在id_vars里的列都作为要转长的列,你的例子里就算不传value_vars=['A','B','C']也能得到正确结果,但显式指定是更稳妥的写法,避免后续DataFrame加新列时出现不符合预期的转换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 06:48:31