如何将DataFrame中超出2倍标准差的异常值替换为NaN?
替换DataFrame中超出均值±2倍标准差的异常值为NaN
步骤1:构造示例DataFrame
先还原你提供的数据集:
import pandas as pd data = { 'col_1': [0.5, 0.4, 0.6, 5.6, 11.2], 'col_2': [7, 4, 8, 32, 98], 'col_3': [300, 340, 276, 764, 1032] } df = pd.DataFrame(data)
步骤2:计算每列的均值与标准差
按列统计均值和标准差,用于确定异常值范围:
col_mean = df.mean() col_std = df.std()
步骤3:替换异常值为NaN
使用mask方法(或where方法),将超出[均值-2*标准差, 均值+2*标准差]范围的值替换为NaN:
# 计算上下边界 lower = col_mean - 2 * col_std upper = col_mean + 2 * col_std # 替换异常值 df_cleaned = df.mask((df < lower) | (df > upper))
最终结果
处理后的df_cleaned如下:
col_1 col_2 col_3 0 0.5 7.0 300.0 1 0.4 4.0 340.0 2 0.6 8.0 276.0 3 NaN NaN NaN 4 NaN NaN NaN
补充说明
如果之前使用mask或numpy失败,大概率是这两个原因:
- 没有按列计算均值和标准差(若误用全局统计,会导致边界错误)
- 逻辑运算符误用:pandas中要使用
|(或)、&(且),而非Python原生的or/and
内容的提问来源于stack exchange,提问作者MAtennis9
相关产品推荐
相关产品推荐

