解决DataFrame列Object转Float时因点逗号混淆产生NaN及聚合计算问题
解决办法:正确转换带逗号的金额列并按客户聚合计算
这个问题我碰到过,原因很明确——你的Amount列用逗号作为小数分隔符,而pd.to_numeric()默认只识别点号(.)作为小数分隔符,所以所有值都被判定为无效数值,最终转成了NaN。下面给你两种靠谱的解决办法,再附上聚合计算的步骤:
一、正确转换Amount列为float类型
方法1:先替换逗号为点号,再转换
适合确定所有金额值都用逗号做小数分隔符的场景:
import pandas as pd # 替换逗号为点号,再转换为float类型 df['Amount'] = df['Amount'].str.replace(',', '.').astype(float)
方法2:直接指定decimal参数
更严谨的方式,通过pd.to_numeric()的decimal参数明确告诉pandas用逗号做小数分隔符:
df['Amount'] = pd.to_numeric(df['Amount'], errors='coerce', decimal=',')
转换完成后,你可以用df.dtypes检查Amount列的类型,应该会显示float64,且数值都保留了原来的31.65。
二、按客户聚合计算总和与平均值
转换成功后,用groupby分组,配合agg方法就能一次性算出总和和平均值:
# 按customer列分组(如果实际要按ID分组,替换成'ID'即可) agg_result = df.groupby('customer')['Amount'].agg(['sum', 'mean'])
运行后你会得到如下结果:
sum meancustomer
026 158.25 31.65
内容的提问来源于stack exchange,提问作者zdz
相关产品推荐
相关产品推荐

