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

如何将DataFrame中大于30的值替换为缺失值、统计超标值数量并解决类型错误问题

解决方法:处理数值列避免类型错误并完成值替换与统计

报错原因分析

你遇到的TypeError: '>=' not supported between instances of 'str' and 'int'错误,是因为你的apply方法作用在了整个DataFrame上,包含了字符串类型的date列。当lambda函数尝试把日期字符串和整数30做比较时,就触发了类型不兼容的错误。

正确实现步骤

我们需要**只针对数值列(A、B列)**进行处理,同时完成两个需求:将大于30的值替换为NaN,以及统计这类值的总数。

1. 替换大于30的值为NaN

推荐用df.where()或df.mask()方法,它们比apply更适合处理大规模数据集,执行效率更高:

import numpy as np

# 自动筛选出所有数值类型的列
numeric_cols = df.select_dtypes(include=['int64', 'float64']).columns
# 用where保留<=30的值,其余替换为NaN
df[numeric_cols] = df[numeric_cols].where(df[numeric_cols] <= 30, np.nan)

或者用逻辑相反的mask方法,效果完全一致:

df[numeric_cols] = df[numeric_cols].mask(df[numeric_cols] > 30, np.nan)

2. 统计大于30的值的数量

直接对原始数值列的条件判断结果求和即可,两层sum()分别计算列内数量和所有列的总和:

count_over_30 = (df[numeric_cols] > 30).sum().sum()
print(f"数据集中大于30的值的数量为:{count_over_30}")
# 对你的示例数据,会输出:数据集中大于30的值的数量为:3

完整示例代码

import pandas as pd
import numpy as np

# 构造示例DataFrame
data = {
    'date': ['01/01/2021', '01/02/2021', '01/01/2022', '01/01/2023'],
    'A': [20, 15, 17, 30],
    'B': [5, 20, 30, 40]
}
df = pd.DataFrame(data)

# 处理数值列,替换大于30的值为NaN
numeric_cols = df.select_dtypes(include=['int64', 'float64']).columns
df[numeric_cols] = df[numeric_cols].where(df[numeric_cols] <= 30, np.nan)

# 统计大于30的值的总数
count_over_30 = (df[numeric_cols] > 30).sum().sum()

print("处理后的DataFrame:")
print(df)
print(f"\n大于30的值的数量:{count_over_30}")

输出结果

处理后的DataFrame:
         date     A     B
0  01/01/2021  20.0   5.0
1  01/02/2021  15.0  20.0
2  01/01/2022  17.0   NaN
3  01/01/2023   NaN   NaN

大于30的值的数量:3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 09:34:08