如何在pandas DataFrame中将np.inf、-np.inf替换为对应列的最大最小值
原代码失效原因
原代码无法生效的核心原因有三个:
replace方法不支持传入未执行的方法对象作为替换值,df.max是方法本身,不会自动计算得到各列的最大值序列replace的axis参数不适用于该替换场景,无法实现按列匹配统计值的逻辑- 直接调用
df.max()默认不会排除无穷值,计算得到的结果仍然是np.inf,即使语法正确也无法完成替换
Pandas 高效实现方案
全向量化操作,不会修改原数据中的NaN值,适合大尺寸DataFrame使用:
import pandas as pd import numpy as np # 先计算各列排除无穷值后的最大、最小值 valid_df = df.replace([np.inf, -np.inf], np.nan) col_max = valid_df.max(axis=0) col_min = valid_df.min(axis=0) # 按列匹配替换无穷值 df.replace(np.inf, col_max, inplace=True) df.replace(-np.inf, col_min, inplace=True)
Numpy 实现方案
针对numpy.ndarray类型的数组实现相同逻辑:
import numpy as np # 假设arr为待处理的numpy数组 # 计算每列排除无穷值后的最大、最小值 arr_masked = np.where(np.isinf(arr), np.nan, arr) col_max = np.nanmax(arr_masked, axis=0) col_min = np.nanmin(arr_masked, axis=0) # 替换正无穷 inf_pos = np.where(arr == np.inf) arr[inf_pos] = np.take(col_max, inf_pos[1]) # 替换负无穷 inf_neg = np.where(arr == -np.inf) arr[inf_neg] = np.take(col_min, inf_neg[1])
内容的提问来源于stack exchange,提问作者Olli
相关产品推荐
相关产品推荐

