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

如何检查Pandas Series值是否为整数并统计?求Pandas/Numpy更优方法

高效检查Pandas Series中的整数并统计的方法

嘿,你完全不用把Series转成列表手动遍历,Pandas和Numpy本身就有更高效的向量化方法来搞定这个需求,而且性能比逐元素检查好太多,尤其是数据量大的时候!下面给你几种实用的方案:

方案1:用Pandas向量化判断(兼容浮点数形式的整数,比如2.0)

如果你的需求是只要数值是整数就算(不管是int类型还是值为整数的float类型),直接用取模运算就能生成布尔掩码,然后统计非常方便:

import pandas as pd

# 示例Series
s = pd.Series([1, 2.0, 3.5, 4, 5.2, 6.0])

# 生成每个元素是否为整数的布尔掩码
is_integer = s % 1 == 0

# 统计整数的数量
integer_count = is_integer.sum()
print(f"整数的数量:{integer_count}")  # 输出:整数的数量:4

# 也可以查看整数/非整数的分布
distribution = is_integer.value_counts()
print(distribution)
# 输出:
# True     4
# False    2
# dtype: int64

方案2:用Numpy实现更高性能的判断

如果你的Series数据量特别大,用Numpy的向量化操作会比纯Pandas更快一点,原理和上面一样:

import numpy as np
import pandas as pd

s = pd.Series([1, 2.0, 3.5, 4, 5.2, 6.0])

# 转成Numpy数组后判断
is_integer_np = np.equal(np.mod(s.to_numpy(), 1), 0)

# 统计数量
integer_count_np = np.sum(is_integer_np)
print(f"整数的数量:{integer_count_np}")  # 输出:整数的数量:4

方案3:严格判断元素类型为整数(排除2.0这类浮点数)

如果你的需求是只有int类型的元素才算,那可以用isinstance结合apply来检查:

import pandas as pd

s = pd.Series([1, 2.0, 3.5, 4, 5.2, 6.0])

# 严格判断元素类型是否为int
is_int_type = s.apply(lambda x: isinstance(x, int))

# 统计数量
int_type_count = is_int_type.sum()
print(f"int类型的元素数量:{int_type_count}")  # 输出:int类型的元素数量:2

为什么这些方法比转列表遍历更好?

你之前用tolist()再逐个is_integer()的方法是逐元素循环,而上面的向量化操作是Pandas/Numpy底层优化过的C级别的运算,速度差距会随着数据量增大而越来越明显——比如100万条数据的话,向量化方法可能比循环快几十甚至上百倍。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:52:40