使用pandas统计CSV列中字符串出现次数报int64不支持错误如何解决
问题解决方法
错误根因
你遇到的这个报错是因为当前执行环境(一般是对接了Thrift接口的分布式运行环境、受限在线编程环境)不支持直接传输numpy的int64类型,原生pandas对布尔掩码调用sum()返回的就是numpy.int64类型,所以触发了序列化异常。
可用解决方式
下面几种方法都可以实现统计需求,同时避免报错:
- 方法1:用
value_counts统计后转Python原生int
# 统计所有分类的出现次数,取不到pound时默认返回0,转原生int规避类型问题 total = int(df['pred_class'].value_counts().get('pound', 0)) print(total)
- 方法2:过滤匹配行后取行数再转类型
# 先筛选出pred_class为pound的所有行,取行数后转原生int total = int(df[df['pred_class'] == 'pound'].shape[0]) print(total)
- 方法3:用字符串匹配统计后转换类型
# 精确匹配每一行的字符串是否为pound,求和后转原生int total = int(df['pred_class'].str.fullmatch('pound').sum()) print(total)
所有方法的核心逻辑都是将计算得到的numpy数字类型转换为Python原生的int类型,适配当前环境的传输要求。
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

