基于车型的车价均值插补报错:DataFrameGroupBy不支持赋值
问题解决:分组均值插补车价字段
报错原因
你遇到的TypeError: 'DataFrameGroupBy' object does not support item assignment,是因为grouped_df = df1.groupby('modele')得到的是分组对象(GroupBy),不是普通的DataFrame,无法直接像操作DataFrame那样给它的列赋值。
正确实现步骤
拆分两步完成需求,先替换异常值为NaN,再按车型分组填充均值:
- 替换异常值为NaN
直接在原DataFrame上操作,把prix_millions里的0.0和1000000.0替换成缺失值:
import pandas as pd # 方法1:批量替换 df1['prix_millions'] = df1['prix_millions'].replace([0.0, 1000000.0], pd.NA) # 方法2:布尔索引精准替换(效果一致) # mask = (df1['prix_millions'] == 0.0) | (df1['prix_millions'] == 1000000.0) # df1.loc[mask, 'prix_millions'] = pd.NA
- 按车型分组填充均值
使用groupby.transform()方法,它会返回和原DataFrame长度一致的序列,直接赋值回原字段即可:
# 计算每组均值,填充对应组的缺失值 df1['prix_millions'] = df1.groupby('modele')['prix_millions'].transform( lambda x: x.fillna(x.mean()) )
也可以用更简洁的写法:
df1['prix_millions'] = df1['prix_millions'].fillna( df1.groupby('modele')['prix_millions'].transform('mean') )
完整代码示例
import pandas as pd # 假设df1是你的原始数据 # df1 = pd.read_csv('你的数据文件.csv') # 步骤1:替换异常值为NaN df1['prix_millions'] = df1['prix_millions'].replace([0.0, 1000000.0], pd.NA) # 步骤2:分组均值插补 df1['prix_millions'] = df1.groupby('modele')['prix_millions'].transform( lambda x: x.fillna(x.mean()) )
内容的提问来源于stack exchange,提问作者kim seol
相关产品推荐
相关产品推荐

