R语言:统计DataFrame各列中大于120的值的数量
解决DataFrame每列大于120值的统计问题
嘿,我来帮你搞定这个统计需求!你之前得到结果为0的情况,大概率是数据类型的问题或者统计方向搞反了,咱们一步步来解决:
先排查核心问题:数据类型
如果你的DataFrame里某些列是字符串类型(比如导入数据时默认识别成了object),直接和数字120比较会得到错误的布尔结果(比如字符串'130'和120比较会返回False),这就会导致统计出来全是0。
先检查每列的数据类型:
print(df.dtypes)
如果看到列的类型是object,先把它转为数值类型:
import pandas as pd # 将所有列转为数值,无法转换的内容设为NaN(不影响统计) df = df.apply(pd.to_numeric, errors='coerce')
两种高效统计每列大于120值数量的方法
方法1:用gt() + sum()(最简洁)
gt(120)会生成一个布尔值DataFrame(大于120的为True,否则为False),然后sum()默认按列求和(True=1,False=0),直接得到每列符合条件的数量:
# 统计每列大于120的值的数量 count_over_120 = df.gt(120).sum() print(count_over_120)
方法2:用apply() + 自定义逻辑
如果你想更直观地看到筛选过程,可以用apply()对每列单独处理:
count_over_120 = df.apply(lambda col: col[col > 120].count()) print(count_over_120)
为什么你之前得到0?常见坑点
- 数据类型不匹配:刚才说的字符串列和数字比较的问题,是最常见的原因。
- 统计方向错了:如果不小心加了
axis=1,比如df.gt(120).sum(axis=1),那统计的是每行大于120的数量,而不是每列。 - 数据里确实没有大于120的值?:不过你说实际情况不符,所以这个可能性很低,优先检查前两个点。
示例演示
假设你有这样的DataFrame:
data = { '列1': [110, 130, 150, 90], '列2': ['125', '115', '140', '85'], # 字符串类型 '列3': [120, 121, 119, 130] } df = pd.DataFrame(data)
经过转类型+统计后,输出会是:
列1 2 列2 2 列3 2 dtype: int64
这样就能自动对所有列完成统计啦!如果还有问题,可以看看数据里有没有特殊格式的内容(比如带逗号的数字),转类型时可以额外处理。
内容的提问来源于stack exchange,提问作者Essi
相关产品推荐
相关产品推荐

