为Pandas DataFrame多列应用自定义函数遇问题,已定位原因并解决
Pandas多列批量转换指定文本值的实现与问题排查
需求
要给DataFrame里的指定列cols=['a','b','c','d']做值转换:
- 把
"5: Very important"改成数字5 - 把
"1: Not at all important"改成数字1 - 其他值原样保留
有效实现代码
方式一:自定义函数+applymap
先写转换逻辑,再批量应用到目标列:
import pandas as pd def cols_1(val): if val == "5: Very important": return 5 elif val == "1: Not at all important": return 1 return val # 对指定列应用函数 df[cols] = df[cols].applymap(cols_1)
方式二:用replace直接批量替换(更高效)
不用写自定义函数,直接构造映射字典替换:
replace_rules = { "5: Very important": 5, "1: Not at all important": 1 } df[cols] = df[cols].replace(replace_rules)
问题排查
之前试了各种写法要么触发TypeError、ValueError、AttributeError这类报错,要么转换后结果没变化,核心原因是用df.iloc选列时搞错了列的位置——iloc是按位置索引选取列,如果目标列的实际位置和传入iloc的索引不匹配,要么函数被应用到了错误的列上,要么因为列的数据类型不兼容触发报错。换成直接用列名(df[cols])选列就能精准定位目标列,原来的正确写法其实是有效的。
内容的提问来源于stack exchange,提问作者lala345
相关产品推荐
相关产品推荐

