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
相关产品推荐
相关产品推荐

