Pandas技术疑问:需将object类型转为数值型才能求和吗?
问题解答
核心疑问解答
当你的需求是统计某文本类别的出现次数(比如统计学士学位的人数),不需要将object类型转为float/int。因为你要的是「行数计数」,不是对列内的数值进行求和——只有当你需要对列中存储的数值(比如薪资、年龄这类本该是数字却存成object的内容)求和时,才需要先转换类型。
更高效的实现方法
你当前的方法需要拆分出子集再计数,其实可以用更简洁的方式完成,推荐两种思路:
方法1:用value_counts()直接获取类别计数
value_counts()会直接返回每个教育类别的出现次数,代码更直观:
# 获取所有教育类别的统计结果 edu_stats = demographic_data_df['education'].value_counts() # 提取学士学位的人数(如果没有该类别则返回0) bachelor_count = edu_stats.get("Bachelors", 0) # 总人数(排除缺失值用count(),包含缺失值用len()) total_count = demographic_data_df['education'].count() # 计算占比 bachelor_percent = round((bachelor_count / total_count) * 100, 1) print(f'The percentage of people who have a bachelor degree is {bachelor_percent}%')
方法2:用布尔值求和(最简洁)
Pandas中布尔值True等价于1,False等价于0,直接对布尔筛选结果求和就能得到目标行数:
# 统计学士学位的人数 bachelor_count = (demographic_data_df['education'] == "Bachelors").sum() # 总人数 total_count = len(demographic_data_df) # 计算占比 bachelor_percent = round((bachelor_count / total_count) * 100, 1) print(f'The percentage of people who have a bachelor degree is {bachelor_percent}%')
注意事项
- 如果
education列存在缺失值,count()会自动排除缺失行,而len()会包含所有行,根据你的统计需求选择即可。 - 确保筛选的类别名称和数据中的完全一致(比如注意大小写、空格,比如是"Bachelors"还是"Bachelor's"),否则会统计到0。
内容的提问来源于stack exchange,提问作者Lore MID
相关产品推荐
相关产品推荐

