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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 05:27:02