两个结构一致的DataFrame执行melt仅一个成功,报语法错误如何解决?
问题根因
你提供的两行melt代码都存在相同的语法错误,所谓第一行能正常运行大概率是你记错了实际运行状态。
错误核心是value_vars参数后漏写了赋值等号=:
- 你写的
value_vars['men','women']不会被Python识别为「给value_vars参数传入列表['men','women']」,而是会被解析为「取变量value_vars的['men','women']索引对应的取值,把这个取值作为无参数名的位置参数传给melt方法」。 - 按照Python语法规则,关键字参数(即带参数名赋值的参数,比如代码里的
id_vars = 'location')之后不允许出现位置参数,因此直接触发你看到的Syntax error: Positional argument follows keyword argument报错。
修复方案
给value_vars补充赋值等号即可:
df_1 = df_a.melt(id_vars = 'location', value_vars = ['men','women'], var_name = 'gender', value_name = 'income') df_2 = df_b.melt(id_vars = 'age', value_vars = ['men','women'], var_name = 'gender', value_name = 'income')
额外注意事项
你描述中提到df_a、df_b的性别列是Men、Women(首字母大写),但代码中传的是小写的'men'、'women',修复语法错误后运行会因为找不到对应列抛出KeyError,需要保证传入的列名和实际DataFrame的列名大小写完全一致。
内容的提问来源于stack exchange,提问作者Ivy McKee
相关产品推荐
相关产品推荐

