如何用Python将年龄列中无效值替换为列均值?
替换年龄列无效值为均值的Python实现方法
假设数据集的Vict Age列包含600,000条数据,其中存在0、-1这类不符合逻辑的无效值,需要将这些值替换为该列有效数据的均值。
原代码问题分析
你提供的代码存在语法错误与逻辑问题:
# 原代码(错误示例) df6 = df5['Vict Age'].replace([0, -1]).mean()) df6.update(df5) df6
- 语法错误:多了一个闭合括号,
mean()后多余的)会导致运行报错 - 逻辑错误:
replace([0, -1])未指定替换值,默认会把0、-1转为缺失值,后续mean()得到的是一个标量数值,无法用update()方法去更新原DataFrame
正确实现步骤
1. 计算有效数据的均值
先过滤掉无效值,再计算该列的均值,有两种常用写法:
import pandas as pd # 写法1:通过布尔索引筛选有效数据后求均值 valid_mean = df5[~df5['Vict Age'].isin([0, -1])]['Vict Age'].mean() # 写法2:将无效值转为缺失值,删除缺失值后求均值 valid_mean = df5['Vict Age'].replace([0, -1], pd.NA).dropna().mean()
2. 替换无效值为均值
可以直接修改原DataFrame的列,或者生成新的DataFrame保存结果:
# 方法1:直接修改原DataFrame的Vict Age列 df5['Vict Age'] = df5['Vict Age'].replace([0, -1], valid_mean) # 方法2:创建原DataFrame的副本,修改副本避免影响原数据 df6 = df5.copy() df6['Vict Age'] = df6['Vict Age'].replace([0, -1], valid_mean)
说明
- 若你的数据集规模较大(60万条),上述两种方法的效率都足够应对,不会有性能问题
- 建议使用方法2创建副本修改,避免误操作破坏原始数据
内容的提问来源于stack exchange,提问作者Sharvinraj
相关产品推荐
相关产品推荐

