pandas如何遍历多列并按条件批量替换DataFrame单元格数值
解决方案
你完全不需要手动遍历每一列每一行做替换,pandas内置的replace方法原生支持全表批量匹配替换,仅需两步即可完成需求:
- 先定义映射关系字典:
value_map = { "1. No": 1, "2. Poor": 2, "3. Good": 3, "4. Excellent": 4 }
- 直接对整个DataFrame执行替换:
LTs_support = LTs_support.replace(value_map)
如果需要确保最终列的类型为整数,可以再加一步类型转换:
LTs_support = LTs_support.replace(value_map).astype(int)
原代码失效原因说明
你写的iteritems()遍历逻辑存在两个问题:
iteritems()返回的迭代元素是(列名, Series列对象),你直接拿整个列对象和单个字符串做相等判断,结果永远为False,不会触发替换逻辑- pandas的
replace方法默认不是原地修改,需要将修改后的结果赋值回原变量/列才会生效
如果确实需要按列遍历实现,也可以参考下面的写法:
for col_name in LTs_support.columns: LTs_support[col_name] = LTs_support[col_name].map(value_map)
内容的提问来源于stack exchange,提问作者Nadia Santos
相关产品推荐
相关产品推荐

