Pandas中isnull()返回布尔值列计算mean的运行机制疑问
问题解答
1. 布尔值的底层本质
- Python 中布尔类型
bool是整数类型int的子类,True等价于整数1,False等价于整数0,直接参与数值计算时会自动转换为对应的整数值。 - Pandas的数值计算逻辑继承了这个特性,对布尔序列执行统计计算时,会自动把布尔值转为1和0再运算。
2. 布尔序列计算mean的逻辑
对布尔序列调用mean()方法时,计算规则为:
均值 = 序列中
True的个数 / 序列总元素个数
拿你给出的示例数据举例:
调用df.isnull()得到布尔矩阵后,各列的mean()计算结果如下:
- ID列:全为
False,True的个数为0,均值为 0/3 = 0 - Name列:全为
False,均值为0 - Phone列:有2个
True,均值为 2/3 ≈ 0.6667
所以代码df.isnull().mean()==0的筛选逻辑就是:列中没有任何缺失值(True的个数为0,均值为0),和你写的df.notnull().all()的逻辑完全等价,运行结果自然一致。
3. 简单验证
你可以运行下面的代码直观验证这个特性:
import pandas as pd # 构造布尔序列 s = pd.Series([True, False, True, False, False]) print(s.mean()) # 输出 0.4,对应2个True除以总长度5
内容的提问来源于stack exchange,提问作者minato namikaze
相关产品推荐
相关产品推荐

