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

Pandas groupby聚合时报错invalid literal for int() with base 10: '\xa0-'问题咨询

解决方案

问题核心原因

报错信息中的\xa0是ASCII编码的不间断空白符,不属于普通半角空格(ASCII值32),你之前预设的过滤列表仅能匹配带普通空格的-类异常值,无法覆盖这类带特殊空白符的异常内容,因此清洗步骤没有生效。

第一步:定位全量异常值

针对5000万行的大数据量,可以用pandas内置的向量化操作快速统计所有导致转换失败的异常值,无需逐行排查:

import pandas as pd
import numpy as np

# 尝试将Value列转数值,无法转换的统一设为NaN
df['Value_temp'] = pd.to_numeric(df['Value'], errors='coerce')
# 统计所有转换失败的异常值及其出现频次
abnormal_counts = df[df['Value_temp'].isna()]['Value'].value_counts()
print(abnormal_counts)

运行后即可得到所有异常值的具体内容,方便你后续针对性处理。

第二步:清洗修复Value列

这里提供两种常用方案,可按需选择:

方案1:通用快速清洗(无需提前知道异常值类型)

直接过滤所有无法转换为数值的行,适合不需要保留异常值相关信息的场景:

# 转换为数值,异常值设为NaN
df['Value'] = pd.to_numeric(df['Value'], errors='coerce')
# 删除Value为空的行
df = df.dropna(subset=['Value'])
# 可选:将Value转换为int类型
df['Value'] = df['Value'].astype(int)

方案2:针对性清洗特殊字符

如果确认异常值均为带各类空白符的-、空值类无效内容,可以先统一清理空白符再转换:

# 先移除Value中所有类型的空白符(包含普通空格、不间断空格、制表符等)
df['Value'] = df['Value'].astype(str).str.replace(r'\s+', '', regex=True)
# 替换所有无效值为NaN
df['Value'] = df['Value'].replace(['-', 'NaN', '<NA>', '', '0'], np.nan)
# 删除空值后转int
df = df.dropna(subset=['Value'])
df['Value'] = df['Value'].astype(int)

注意:代码中统一使用df['Value']而非df.value,避免和pandas Series内置的value属性产生冲突,也能规避列名大小写带来的问题。

第三步:执行分组聚合

清洗完成后再运行原groupby代码即可正常执行:

df = df.groupby(['Date','Location'], as_index = False).agg({'Value':np.sum ,'type':'first'})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 14:54:03