如何基于指定值列表批量替换Pandas DataFrame各列的匹配值
实现方案
核心思路
直接利用pandas内置的替换方法适配按列独立匹配的需求,两种实现方式可选:批量替换写法简洁高效,逐列循环写法便于调试排查。
代码实现
首先导入依赖库:
import pandas as pd import numpy as np
你给出的查找值列表参考:
lookup_values_per_column = [[-99999], [9999], [99, 98],[9],[99],[996, 997, 998, 999]]
方法1:批量替换(推荐,性能更高)
直接构造列维度的替换映射,一次调用完成所有列的替换:
# 构造替换规则字典,键为列名,值为{待匹配值: 替换目标}的映射 replace_rule = {} for col_order, lookup_vals in enumerate(lookup_values_per_column): # 按顺序取对应的列名,lookup_values_per_column第0项对应DataFrame第1列 col_name = df.columns[col_order] replace_rule[col_name] = {val: pd.NA for val in lookup_vals} # 执行替换,inplace=True表示直接修改原DataFrame,不需要重新赋值 df.replace(replace_rule, inplace=True)
方法2:逐列循环(便于调试)
如果需要中间打印匹配结果排查问题,可以用逐列判断的写法:
for col_order, lookup_vals in enumerate(lookup_values_per_column): col_name = df.columns[col_order] # 筛选当前列中属于查找列表的行,替换为NA df.loc[df[col_name].isin(lookup_vals), col_name] = pd.NA
注意事项
- 如果你习惯使用numpy的空值而非pandas原生
pd.NA,把代码中的pd.NA替换为np.nan即可 - 替换后如果出现整数列自动转为float类型的问题,可在替换结束后执行
df = df.convert_dtypes()转为pandas可空数值类型即可保留整数格式 - 需保证
lookup_values_per_column的元素顺序和你要处理的DataFrame列顺序完全对应
内容的提问来源于stack exchange,提问作者Skerre
相关产品推荐
相关产品推荐

