缺失值的處理是一件藝術(shù)活,最高的境界應(yīng)該是缺而不失籽懦。pandas中提供了非常豐富的工具來對缺失值進(jìn)行處理霜定。這里主要是對常用方法的簡要介紹。
注:不同地區(qū)和軟件對缺失值的表示方法不同戏自,在用pandas讀取文件時(shí)可指定缺失值的形式給參數(shù)na_values,如:
missing_values = ['n/a', 'na', '--']
df = pd.read_csv('文件名‘, na_values = missing_values)
缺失值處理常用策略:
- 對有缺失值的行和列簡單的刪除伤锚;
- 對缺失值進(jìn)行計(jì)算擅笔,如用變量的平均值或眾數(shù)進(jìn)行填充;
- 在缺失值周圍建立模型屯援,然后用模型提供的值進(jìn)行填充猛们。
一、缺失值的刪除
1.數(shù)據(jù)集中缺失值的統(tǒng)計(jì)
2.檢查某列是否有缺失值
3.刪除某列中有缺失值的行
4.刪除有缺失值的行
如果需要某行全部是缺失值才刪除時(shí)狞洋,可以添加參數(shù)
how = 'all', axis = 0
二弯淘、缺失值的計(jì)算
通常比較常用的填充缺失值的方法有計(jì)算變量的平均值、中位數(shù)和眾數(shù)吉懊,更高級(jí)一點(diǎn)的是用K-NN和bayesian統(tǒng)計(jì)等算法來計(jì)算(R中比較出名的計(jì)算缺失值的包Amelia就是用bootstrap+EM算法求解)庐橙。不管哪種方法都應(yīng)注意計(jì)算帶來的bias。
中位數(shù)填充將
mean()
換成median()
借嗽,眾數(shù)將其換成mode()[0]
态鳖, 如果是多列的話,可以用lambda函數(shù)恶导,
fill_na = lambda col:col.fillna(col.mode()[0])
df.apply(fill_na, axis = 0)
三浆竭、 分類變量的熱編碼
對于分類變量的處理主要是采用熱編碼的方式,在其中可以指定缺失值是否去除
保留分類變量中的缺失值惨寿,將其單獨(dú)作為一列邦泄, 加dummy_na = True
:
對數(shù)據(jù)集中每一個(gè)分類變量進(jìn)行熱編碼,然后去除原來的變量:
def create_dummy_df(df, cols, dummy_na):
for col in cols:
df = pd.concat([df.drop(col, axis = 1), pd.get_dummies(df[col], dummy_na = dummy_na, axis = 1)
return df