使用fillna()填充单个缺失值报numpy.float64无fillna属性错误
报错原因
fillna()是pandas库中Series、DataFrame两类数据结构的专属方法,只能对这两类对象调用。
当你使用gaming.loc[16448, 'year_of_release']取值时,因为同时传入了单个行标签和单个列名,loc会直接返回对应单元格的标量值,类型为numpy.float64,不属于pandas的Series或DataFrame,自然不存在fillna属性,因此触发AttributeError。
修正方法
根据实际需求选择对应写法即可:
- 直接赋值(写法最简洁,适用于明确要将该位置值设为2012.0的场景,无论原值是否为缺失值都会覆盖)
gaming.loc[16448, 'year_of_release'] = 2012.0
- 保留fillna的空值判断逻辑(仅当该位置值为NaN时才替换,不修改非空原值):将行索引用列表包裹传入,让loc返回长度为1的Series对象,即可正常调用fillna
gaming.loc[[16448], 'year_of_release'].fillna(2012.0, inplace=True)
- 条件掩码赋值(最稳妥的写法,规避链式索引的潜在风险,可直接扩展到多行列的批量填充场景)
# 构造筛选条件:索引为16448 且 发行年份为空 fill_mask = (gaming.index == 16448) & (gaming['year_of_release'].isna()) gaming.loc[fill_mask, 'year_of_release'] = 2012.0
内容的提问来源于stack exchange,提问作者Maor Ohayon
相关产品推荐
相关产品推荐

