如何按列名匹配字典键替换DataFrame中所有'<LOD'值?
按列替换'<LOD'为对应检测限的高效实现
最直接的循环实现
针对你的需求,直接遍历replace_vals中的列名,对每一列单独替换<LOD即可,完全不会影响其他列,效率也足够应对28列的规模:
for col_name in replace_vals: df[col_name] = df[col_name].replace('<LOD', replace_vals[col_name])
更简洁的apply写法
如果喜欢一行代码的风格,也可以用apply配合lambda实现,逻辑和上面一致:
df = df.apply( lambda col: col.replace('<LOD', replace_vals[col.name]) if col.name in replace_vals else col )
为什么你之前的代码不对?
你之前用np.where加全局df.replace的问题在于:每次循环都会把所有列的<LOD替换成当前列对应的检测限,最后所有列的<LOD都会被替换成最后一个循环列的值,完全不符合需求。上面的两种方法都是针对单列操作,精准替换对应列的目标值。
验证结果
运行代码后,你的示例DataFrame会变成:
Ti Concentration V Concentration Cr Concentration 0 2748 25 55 1 3551 25 100 2 1922 345 10
内容的提问来源于stack exchange,提问作者Liraell
相关产品推荐
相关产品推荐

