You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas DataFrame中计算异常值、生成标记列(含NaN处理与统计)

解决方案

步骤1:修正数据读取代码

你当前的DataFrame创建代码里column参数拼写错误,应改为columns:

import numpy as np
import pandas as pd
from scipy import stats

dt = np.fromfile(path, dtype='float')
df = pd.DataFrame(dt.reshape(-1, 3), columns=['X', 'Y', 'Z'])

步骤2:新增「Is Outlier」列

按需求分逻辑处理:

  1. 标记含NaN的行:用df.isna().any(axis=1)判断每行是否存在缺失值,对应位置设为NaN
  2. 对无缺失值的行,计算各列Z-score的绝对值,判断是否存在≥3的情况,存在则标记True,否则False

完整实现代码:

# 判断每行是否包含至少一个NaN值
has_nan = df.isna().any(axis=1)

# 计算Z-score(自动忽略NaN),判断每行是否存在至少一个异常值(Z-score绝对值≥3)
is_outlier_row = (np.abs(stats.zscore(df, nan_policy='omit')) >= 3).any(axis=1)

# 按条件赋值:有NaN的行设为NaN,其余用异常值判断结果
df['Is Outlier'] = np.where(has_nan, np.nan, is_outlier_row)

步骤3:统计「Is Outlier」列中True的数量

直接用sum()统计即可,NaN会被自动忽略:

true_count = df['Is Outlier'].sum()
print(f"异常值行数量:{true_count}")

补充说明

  • stats.zscore的nan_policy='omit'参数会忽略NaN值计算Z-score,确保无缺失值的行能正常完成异常值判断
  • np.where可以精准实现“有NaN设为NaN,否则按异常值规则标记”的逻辑

内容的提问来源于stack exchange,提问作者mchd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 19:15:45