直接用代碼來展示[基于泰坦尼克資料]
- 真實資料往往某些變量會有缺失值。
- 這裡,cabin有超過70%以上的缺失值,我們可以考慮直接丢掉這個變量。 – 删除某一列資料
- 像Age這樣的重要變量,有20%左右的缺失值,我們可以考慮用中位值來填補。-- 填補缺失值
- 我們一般不提倡去掉帶有缺失值的行,因為其他非缺失的變量可能提供有用的資訊。-- 删除帶缺失值的行
普通的方法(直接根據所需要的值來進行填充)
# 重新載入原始資料
titanic_df=pd.read_csv("titanic.csv")
# 計算所有人年齡的均值
age_median1 = titanic_df.Age.median()
# 使用fillna填充缺失值,inplace=True表示在原資料titanic_df上直接進行修改
titanic_df.Age.fillna(age_median1, inplace=True)
# 檢視Age列的統計值
titanic_df.Age.describe()
考慮性别因素,分别用男女乘客各自年齡的中位數來填補(需要建立索引)
titanic_df = pd.read_csv("titanic.csv")
# 分組計算男女年齡的中位數, 得到一個Series資料,索引為Sex
age_median2 = titanic_df.groupby("Sex").Age.median()
# 設定索引為Sex
titanic_df.set_index("Sex",inplace=True)
# 使用fillna填充缺失值,根據索引值填充
titanic_df["Age"].fillna(age_median2,inplace=True)
# 重置索引,即取消Sex索引
titanic_df.reset_index(inplace=True)
titanic_df["Age"].describe()
同時考慮性别和艙位因素
# 重新載入原始資料
titanic_df=pd.read_csv("titanic.csv")
# 分組計算不同艙位男女年齡的中位數, 得到一個Series資料,索引為Pclass,Sex
age_median3 = titanic_df.groupby(['Pclass', 'Sex']).Age.median()
# 設定Pclass, Sex為索引, inplace=True表示在原資料titanic_df上直接進行修改
titanic_df.set_index(['Pclass','Sex'], inplace=True)
# 使用fillna填充缺失值,根據索引值填充
titanic_df.Age.fillna(age_median3, inplace=True)
# 重置索引,即取消Pclass,Sex索引
titanic_df.reset_index(inplace=True)
# 檢視Age列的統計值
titanic_df.Age.describe()