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

如何使用any()函数识别DataFrame中Annual Income列的异常值

问题分析与解决方法

为什么之前的代码返回空Series?

你用np.random.randint(0, 100)生成的Annual Income列取值范围是0到99的整数。对于这个均匀分布的数据,均值大概在49.5左右,标准差约28.87,3倍标准差就是86.6。算出来的上下限分别是136.1和-37.1,你的数据根本碰不到这个范围,所以自然返回空的Series。

用any()识别异常值的步骤

any()的作用是判断布尔序列里有没有至少一个True,刚好能用来快速判断某列有没有异常值。具体操作如下:

1. 生成异常值标记掩码

先做一个布尔Series,把每行的Annual Income是否超出3σ范围标记出来:

# 先算上下限
upper_limit = RandomValues['Annual Income'].mean() + 3 * RandomValues['Annual Income'].std()
lower_limit = RandomValues['Annual Income'].mean() - 3 * RandomValues['Annual Income'].std()

# 标记异常值:超出上限或低于下限的行设为True
outlier_mask = (RandomValues['Annual Income'] > upper_limit) | (RandomValues['Annual Income'] < lower_limit)

2. 用any()判断是否存在异常值

直接对掩码调用any(),返回True就说明有异常值,False就是没有:

has_outliers = outlier_mask.any()
print(f"是否存在异常值: {has_outliers}")

3. (可选)提取异常值行

如果确实存在异常值,用掩码就能把对应的行筛出来:

if has_outliers:
    outlier_rows = RandomValues[outlier_mask]
    print("异常值数据行:")
    print(outlier_rows)
else:
    print("当前数据里没有符合3σ标准的异常值")

测试验证:手动加异常值

为了看到实际效果,你可以手动给Annual Income加几个超出0-99的值测试:

# 手动插入两个异常值
RandomValues.loc[500] = [10, 20, 30, 40, 150]  # 远高于上限
RandomValues.loc[501] = [50, 60, 70, 80, -20]  # 远低于下限

# 重新计算并检测
upper_limit = RandomValues['Annual Income'].mean() + 3 * RandomValues['Annual Income'].std()
lower_limit = RandomValues['Annual Income'].mean() - 3 * RandomValues['Annual Income'].std()
outlier_mask = (RandomValues['Annual Income'] > upper_limit) | (RandomValues['Annual Income'] < lower_limit)

print(outlier_mask.any())  # 输出True
print(RandomValues[outlier_mask])  # 会输出包含150和-20的两行数据

内容的提问来源于stack exchange,提问作者Gurbanoğlu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 04:50:45