Pandas求和报错:float64类型触发TypeError及KeyError问题咨询
解决float64列求和时的TypeError与KeyError问题
我来帮你拆解这个问题的原因和对应的解决办法:
报错原因分析
1. KeyError 直接原因
你执行df['Total'].sum()时触发KeyError,说明你的DataFrame里不存在名为Total的列,或者列名存在拼写问题——比如大小写不一致(比如实际列名是total)、多了/少了空格(比如 Total),导致程序找不到对应的列。
2. TypeError 深层原因
虽然你用str.extract提取数字并转成float64,但这个逻辑有两个潜在问题:
- 正则
(\d+)只能提取整数部分,如果原数据包含小数(比如"15.67"),会丢失小数位,甚至如果字符串里没有整数,会返回NaN; - 如果
Total列不在你处理的iloc[:,9:33]范围内,那它可能还是未处理的object类型,直接对字符串类型列求和就会触发TypeError: an integer is required。
分步解决办法
第一步:确认列的存在性与正确性
先运行以下代码,查看所有列名,确认Total列是否存在:
print(df.columns.tolist())
- 如果列名确实不存在,检查是不是你记错了列名;如果是拼写/格式问题,修正列名后再操作;
- 如果
Total列属于iloc[:,9:33]的范围,那它已经被你之前的代码处理过,否则需要单独处理这个列。
第二步:修复数据类型转换逻辑
你的正则表达式只能提取整数,建议修改为支持小数的版本,同时处理可能的NaN值:
# 支持提取整数和小数的正则,转换为float后填充NaN为0(根据业务需求调整) df.iloc[:,9:33] = df.iloc[:,9:33].apply( lambda x: x.str.extract('(\d+\.?\d*)', expand=False).astype(float).fillna(0) )
转换完成后,可以检查数据类型和缺失值情况:
# 查看列类型 print(df.iloc[:,9:33].dtypes) # 查看缺失值数量 print(df.iloc[:,9:33].isna().sum())
第三步:正确执行求和操作
确认列存在且类型正确后,执行求和:
if 'Total' in df.columns: # 默认skipna=True会自动忽略NaN,也可以明确指定 amount = df['Total'].sum(skipna=True) print(amount) else: print("提示:未找到'Total'列,请检查列名是否正确")
内容的提问来源于stack exchange,提问作者okl
相关产品推荐
相关产品推荐

