背景信息里面都給了相應的答案,但我們可以多了解一下代碼的含義,而不是簡單的復制粘貼
import pandas as pd
import matplotlib.pyplot as plt
from scipy import stats
import numpy as npdata = pd.read_csv("src/death.csv", index_col='Unnamed: 0')data = data.dropna(axis=1, thresh=data.shape[0] * 0.2)
data = data.dropna(axis=0, thresh=data.shape[1] * 0.2)a = pd.isna(data).sum()
cols = [x for i, x in enumerate(a.index) if a[i] > 0]mode_list = 'FIPS Admin2'
for i in cols:if mode_list.find(i) != -1:data[i] = data[i].fillna(data[i].mode().iloc[0])else:data[i] = data[i].fillna(data.mean()[i])cols = '2008/10/20,2008/11/20,2008/12/20'.split(',')
x = data[cols]########## Begin ##########
# 創建一個空的 pandas DataFrame 對象,用于后續存儲異常值檢測結果
a=pd.DataFrame()
for i in x.columns:
# 計算每個特征(列)的標準分數 (z-score),即 (觀測值 - 平均值) / 標準差z=(x[i]-x[i].mean())/x[i].std()
# 判斷差值的絕對值是否大于3,將判斷結果賦值給 DataFrame a 的對應列
# 這里,大于3通常被視作可能的異常值a[i]=abs(z)>3# 統計各列異常值個數
print(a.sum())
# 刪除異常值
# 使用布爾型 DataFrame a 來篩選數據子集 x,保留非異常值
# ~a 會對 DataFrame a 中的布爾值取反,使得 True 變為 False,False 變為 True
# 即保留原數據中那些在 a 中標記為非異常值的位置,x中異常值會被標記成NAN
# 然后調用 dropna() 方法刪除包含缺失值(NAN)的行
x[~a].dropna()########## End ##########
df.dropna() ?#將所有含有NAN項的row刪除
?在這一關中去掉“.dropna()”也能過,上一關中結尾沒加上“.dropna()”,也成功了,目前看來應該不影響,可能是系統自動處理了。