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

如何对含None值的CSV列求和并解决int与str相加类型报错

报错原因

这个报错的核心原因是参与求和运算的元素同时包含int类型和str类型,加法运算符不支持两种不同类型直接运算,结合你写的代码,具体触发逻辑有三个:

  1. read_csv传参错误:你写的pd.read_csv("file.csv",";")中,第二个位置参数对应的是header参数而非分隔符参数,pandas没有正确识别分号分隔符,会导致CSV读入时列结构错乱,大量数值被识别为字符串类型。
  2. 误用chain.from_iterable:pandas的Series对象本身是一维结构,不需要用chain拍平。对一维序列调用chain.from_iterable会把每个字符串类型的单元格值拆成单个字符,比如字符串"120"会被拆成'1'、'2'、'0'三个独立的字符串元素,混入数值序列中直接触发类型错误。
  3. filter(None, ...)的逻辑缺陷:这个写法只能过滤掉布尔值为假的对象(比如None、空串、0),既不能自动把字符串格式的数值转为数字类型,还会把合法的数值0误判为空值过滤,导致求和结果不准。
    另外你写的out['General Lighting'][1:]是硬跳过第一行数据,如果读文件时表头识别错乱,这一步会进一步切分错误数据。
修正方案

直接用pandas原生的数值处理方法即可,不需要引入itertools.chain,逻辑更简单、容错率更高,也不会出现类型错误:

import pandas as pd

# 显式指定分隔符读入CSV,保证数据结构识别正确
df = pd.read_csv("file.csv", sep=";")
# 将目标列统一转为数值类型,无法转换的无效值/空值设为NaN,求和时自动跳过
total = pd.to_numeric(df['General Lighting'], errors='coerce').sum()
print(total)

代码说明:

  • 显式传入sep=";"指定分隔符,避免读入数据结构错乱
  • pd.to_numeric会自动处理列中的None、空字符串、字符串格式数字,无法转为数值的无效内容会被标记为NaN空值
  • pandas自带的.sum()方法默认自动跳过所有NaN值,不会出现类型不匹配问题,也不会误过滤数值0,求和结果准确。
  • 如果你确实需要跳过第一行数据再求和,只要把取列的代码改成df['General Lighting'].iloc[1:]即可,不要直接用[1:]做切片,pandas中用显式的.iloc做位置切片更稳妥。

如果你一定要用原生Python的sum函数实现,不要使用chain.from_iterable,先逐值做类型转换和空值过滤即可:

import pandas as pd

df = pd.read_csv("file.csv", sep=";")
f1 = df['General Lighting'].iloc[1:] # 不需要跳第一行就去掉.iloc[1:]
valid_num = []
for val in f1:
    # 跳过空值
    if pd.isna(val) or str(val).strip() == '':
        continue
    # 尝试转成浮点数,转失败的无效值直接跳过
    try:
        valid_num.append(float(val))
    except (TypeError, ValueError):
        continue
k = sum(valid_num)
print(k)

内容的提问来源于stack exchange,提问作者ilyaf

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 21:18:55