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

如何为Pandas DataFrame每行添加无效值计数与异常值判断列

实现步骤

首先修正你原代码里的小错误:DataFrame的列参数是columns(复数形式),不是column,修正后代码:

import numpy as np
import pandas as pd

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

1. 添加Is Invalid列

直接用isna()检测每行的NaN值,再按行求和就能得到每行的无效值数量:

df['Is Invalid'] = df.isna().sum(axis=1)
  • df.isna():生成和原DataFrame形状一致的布尔矩阵,NaN位置标记为True,其余为False
  • sum(axis=1):按行对布尔值求和(True视为1,False视为0),得到每行的NaN总数

2. 添加Is Outlier列

常用**四分位距法(IQR)**判断异常值,具体实现如下:

# 计算每列的四分位数Q1、Q3和IQR(四分位距)
Q1 = df.quantile(0.25)
Q3 = df.quantile(0.75)
IQR = Q3 - Q1

# 标记每个元素是否为异常值(小于Q1-1.5*IQR 或 大于Q3+1.5*IQR)
outlier_mask = (df < (Q1 - 1.5 * IQR)) | (df > (Q3 + 1.5 * IQR))

# 按行判断是否存在异常值,生成布尔列
df['Is Outlier'] = outlier_mask.any(axis=1)
  • outlier_mask:布尔矩阵,每个位置标记对应元素是否为异常值
  • any(axis=1):按行判断,只要该行有一个异常值就返回True,否则返回False

完整示例代码

import numpy as np
import pandas as pd

# 读取数据并构建DataFrame
dt = np.fromfile(path, dtype='float')
df = pd.DataFrame(dt.reshape(-1, 3), columns=['X', 'Y', 'Z'])

# 添加Is Invalid列
df['Is Invalid'] = df.isna().sum(axis=1)

# 添加Is Outlier列
Q1 = df.quantile(0.25)
Q3 = df.quantile(0.75)
IQR = Q3 - Q1
outlier_mask = (df < (Q1 - 1.5 * IQR)) | (df > (Q3 + 1.5 * IQR))
df['Is Outlier'] = outlier_mask.any(axis=1)

# 查看结果
print(df.head())

内容的提问来源于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:18:36