DASK:替换单列inf无限值时replace方法不生效如何解决
问题原因
你写的ddf['mycolumn'].replace(np.inf,1000)没有生效有两个核心原因:
- Dask的所有数据转换操作都是惰性求值,且默认不是inplace修改,执行上述代码后没有赋值回原列,变更不会被保留
- replace是通用值替换方法,针对
np.inf这类特殊浮点值的匹配效率更低,容易出现匹配失效的问题
正确实现方案
优先使用dask.array.isinf做条件判断+where替换,完全不需要逐行循环或lambda,适配千万级以上大数据量:
单列替换示例
import dask.array as da # 直接赋值回原列完成替换 ddf['mycolumn'] = ddf['mycolumn'].where(~da.isinf(ddf['mycolumn']), 1000)
多列不同值批量替换
你可以提前定义各列的inf替换规则,一次性完成所有列处理,仅遍历你定义的替换规则字典(最多40次遍历,无性能损耗):
import dask.array as da import dask.dataframe as dd # 按需配置每列的inf对应替换值,不需要处理的列不用写 col_replace_config = { "col1": 1000, "col2": 9999, "col3": 500 } # 批量替换所有列的inf值 ddf = ddf.assign(**{ col: ddf[col].where(~da.isinf(ddf[col]), val) for col, val in col_replace_config.items() })
补充说明
如果需要同时替换正inf和负inf,将条件修改为~(da.isinf(ddf[col]) | da.isneginf(ddf[col]))即可。
内容的提问来源于stack exchange,提问作者anakaine
相关产品推荐
相关产品推荐

