如何统计布尔值列的行数?及Pandas DataFrame密码长度不足8位的行数统计
嗨,我来帮你搞定这两个问题!
问题1:如何统计包含布尔值的列的行数?
根据你的需求场景,有几种不同的实现方式:
- 统计布尔列中True值的数量:直接用
df['布尔列名'].sum()就行,因为布尔值在数值计算里True会被当作1,False当作0,sum结果就是True的总个数。 - 统计布尔列中非空值的总行数:用
df['布尔列名'].count(),它会自动忽略列中的NaN值(如果存在的话)。 - 同时查看True和False的数量分布:用
df['布尔列名'].value_counts(),会返回一个Series,清晰展示两种布尔值各自对应的行数。
问题2:统计password列字符长度小于8位的行数
先说说你原有代码里的小问题:users['too_short'].any(1) 用法不对,any(1) 是用来检查每行是否存在至少一个True,但你的too_short已经是布尔列了,直接用users[users['too_short']]就能筛选出目标行。另外,其实不用额外创建length和too_short列,就能更简洁地实现需求。
给你两种可行方案:
方法1:修正你的原有代码
import pandas as pd # 计算密码长度 users['length'] = users.password.str.len() # 直接标记密码过短的行(比pd.cut更直观) users['too_short'] = users['length'] < 8 # 统计符合条件的行数,二选一即可 short_password_count = len(users[users['too_short']]) # 或者用sum(),利用True=1的特性 short_password_count = users['too_short'].sum() print(f"密码长度小于8位的用户数:{short_password_count}")
方法2:一行代码高效实现
不用创建额外列,直接链式计算:
short_password_count = (users['password'].str.len() < 8).sum() print(f"密码长度小于8位的用户数:{short_password_count}")
解释一下:users['password'].str.len() <8 会生成一个布尔Series,每个元素对应行的密码长度是否小于8,sum() 就会统计其中True的数量,也就是你要的目标行数。
内容的提问来源于stack exchange,提问作者Dmitriy Kisil
相关产品推荐
相关产品推荐

