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

如何用Python对CSV文件GroupBy求和并排除非数值数据?

解决CSV按Filename分组后数值列求和(排除非数值数据)的问题

没问题,我刚好碰到过类似的情况——当列被识别为字符串但混着数值和非数值内容时,直接求和确实会出问题。这里给你两种实用的解决方案,用Pandas(处理CSV最常用的工具)来实现:

方案1:先转换列类型,再分组求和

这是最直观的方法,先把#line_changed列转换成数值类型,把非数值内容转为NaN(求和时会自动忽略),再分组计算:

import pandas as pd

# 读取CSV文件
df = pd.read_csv("your_file.csv")

# 将#line_changed转为数值,无法转换的内容设为NaN
df["#line_changed"] = pd.to_numeric(df["#line_changed"], errors="coerce")

# 按Filename分组,仅对#line_changed求和
grouped_sum = df.groupby("Filename")["#line_changed"].sum()

# 如果要对所有数值列求和,加上numeric_only=True确保只处理数值列
# grouped_sum = df.groupby("Filename").sum(numeric_only=True)

方案2:分组时实时处理(不修改原始数据)

如果你不想改动原始DataFrame的列类型,可以在分组的apply方法里直接处理:

import pandas as pd

df = pd.read_csv("your_file.csv")

# 分组后对每组的#line_changed列先转数值再求和
grouped_sum = df.groupby("Filename").apply(
    lambda group: pd.to_numeric(group["#line_changed"], errors="coerce").sum()
)

额外注意点

  • 如果你的非数值内容是带格式的数字(比如"1,234"),需要先清理格式再转换:
    df["#line_changed"] = df["#line_changed"].str.replace(",", "").pipe(pd.to_numeric, errors="coerce")
    
  • pd.to_numeric的errors="coerce"参数是关键:它会把所有无法转换成数值的内容(比如字符串、空值、特殊符号)变成NaN,而sum()方法默认会跳过NaN,完美实现"排除非数值数据"的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:10:50