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
相关产品推荐
相关产品推荐

