下列數(shù)據(jù)來源Kaggle的Titanic題目
查找缺失值
統(tǒng)計數(shù)據(jù)缺失 pd.DataFrame.isnull().sum()
# 判斷每行每列版保,若為null則返回True萝招,返回narray
>>>data = pd.read_csv(DATA_FILE)
>>>data.isnull().sum()
PassengerId 0
Survived 0
Pclass 0
Name 0
Sex 0
Age 177
SibSp 0
Parch 0
Ticket 0
Fare 0
Cabin 687
Embarked 2
dtype: int64
查看數(shù)據(jù)缺失行
# 查看全部有缺失的行
>>>data[data.isnull().values == True]
# 查看年齡有缺失的行
>>>data[data.Age.isnull().values == True]
缺失值填補
要點:盡量保持原始信息狀態(tài)。
方法:
- 當缺少比例很小時摘完,可以直接扔掉這部分樣本數(shù)據(jù)钉汗;
- 按某個統(tǒng)計量補全羹令,可以是定值、均值儡湾、中位數(shù)等特恬;
- 拿函數(shù)或模型預測缺失值。
刪除缺失樣本
# 只要該行存在缺失值徐钠,就將該行刪除
data.dropna(axis='index', how='any', inplace=True)
# 刪除Embarked缺失的整行數(shù)據(jù)
data = data[data.Embarked.notnull()]
定值填充
# 用定值填充
data.Age = data.Age.fillna(0) # 缺失值被填充為0
# 同 data.Age.fillna(0, inplace=True)
# inplace為true表示在原數(shù)組修改數(shù)據(jù)癌刽,不返回拷貝數(shù)組
# 用前后有效值填充
# ffill 前一個有效值,bfill后一個有效值
data.Age = data.Age.fillna(method='ffill')
統(tǒng)計量填充
# 均值填充
data.loc[(data.Age.isnull()), 'Age'] = data.Age.dropna().mean()
# 使用Imputer填充
from sklearn.preprocessing import Imputer
imputer = Imputer(missing_values='NaN', strategy='mean', axis=0)
data = imputer.fit_transform(data)
pandas.DataFrame.loc
sklearn.preprocessing.Imputer
sklearn.preprocessing.Imputer中文
預測值填充(略)
- 可以用函數(shù)進行填補
- 可以針對該特征建立模型進行預測