pandas使用iloc索引实现列条件替换失效,求可行解决方案
问题解决方法
原代码不生效的核心原因
- 列名匹配错误:你定义的
hito变量值为Solicitud personacion,但实际需要处理的目标列名是Solicitud de personacion,缺失了de字段,无法匹配到对应列,自然不会产生修改效果。 - 链式索引问题:Pandas中使用循环+iloc逐行赋值的写法,大概率会操作到DataFrame的临时副本而非原数据,修改不会同步到原表,这是Pandas非常常见的使用误区。
可行解决方案
不要使用循环逐行处理,直接用Pandas向量化操作即可,不仅写法简洁,执行效率也远高于循环,两种常用实现方式如下:
方法1:使用np.where实现
import numpy as np # 先修正hito的列名和实际列名保持一致 hito = 'Solicitud de personacion' # 等于0时用带后缀的列值填充,否则保留原值 a[hito] = np.where(a[hito] == 0, a[f"{hito}_"], a[hito])
方法2:使用Pandas原生mask方法实现
hito = 'Solicitud de personacion' # 当hito列值等于0时,用hito_列的值替换 a[hito] = a[hito].mask(a[hito] == 0, a[f"{hito}_"])
如果你的数据中0是字符串格式的'0',只需要把判断条件里的0修改为'0'即可,避免类型不匹配导致判断失效。
内容的提问来源于stack exchange,提问作者Javier Colás Romanos
相关产品推荐
相关产品推荐

