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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 11:27:15