Python Pandas使用sum()时将DataFrame整数按字符串拼接而非求和如何解决
问题原因
核心问题是suicides_no列的数据类型为字符串(object类型),pandas对字符串列执行sum()方法时会直接拼接所有字符串内容,而非做数值加法运算。
出现类型问题的根源是你读取csv时强制设置了header=None,原本csv自带的表头行被识别为普通数据行,pandas会自动将整列推断为字符串类型,后续你手动删除第一行表头数据后也没有手动转换列类型,就出现了拼接求和的问题。
修复方案
方案1:优化csv读取逻辑(更推荐)
直接读取csv的原生表头,让pandas自动推断数值类型,无需手动改列名、删首行:
import pandas as pd # 直接读取csv,自动识别表头、推断各列数据类型 suicide = pd.read_csv('who_suicide_statistics.csv') # 过滤阿尔巴尼亚的有效数据(排除自杀人数为空的行) albania_suicide = suicide[(suicide['country'] == 'Albania') & (suicide['suicides_no'].notna())].copy() # 分别计算男女自杀总人数 female_sum = albania_suicide.loc[albania_suicide['sex'] == 'female', 'suicides_no'].sum() male_sum = albania_suicide.loc[albania_suicide['sex'] == 'male', 'suicides_no'].sum() print(f"阿尔巴尼亚女性自杀总人数:{female_sum}") print(f"阿尔巴尼亚男性自杀总人数:{male_sum}")
方案2:保留原有读取逻辑,手动转换列类型
如果需要保留你现有的读取逻辑,在删除首行代码后,增加一步类型转换即可:
# 原有代码 suicide = suicide.iloc[1: , :] # 新增:将suicides_no列转为数值类型,无法转换的内容自动设为空值 suicide['suicides_no'] = pd.to_numeric(suicide['suicides_no'], errors='coerce')
参数errors='coerce'可以避免转换失败报错,所有不符合数值格式的内容会被自动设为NaN,后续你调用dropna时会统一过滤。
验证方法
修改前后可以执行print(albania_suicide['suicides_no'].dtype)验证列类型,输出int64/float64代表是数值类型,输出object代表还是字符串类型,需要重新检查转换逻辑。
内容的提问来源于stack exchange,提问作者stack_user
相关产品推荐
相关产品推荐

