删除
- 忽略有缺失值的样本
dropna()
填充
- 使用可用特征或相似样本的均值来填充缺失值
scikit-learn的Imputer类提供了估算缺失值的基本策略,可以使用缺失值所在的行或列的均值,中位数或最频繁值。这个类还允许不同的缺失值编码。
>>> import numpy as np
>>> from sklearn.preprocessing import Imputer
>>> imp = Imputer(missing_values='NaN', strategy='mean', axis=0)
>>> imp.fit([[1, 2], [np.nan, 3], [7, 6]])
Imputer(axis=0, copy=True, missing_values='NaN', strategy='mean', verbose=0)
>>> X = [[np.nan, 2], [6, np.nan], [7, 6]]
>>> print(imp.transform(X))
[[ 4. 2. ]
[ 6. 3.666...]
[ 7. 6. ]]
- 使用特殊值来填补缺失值,如-1
fillna()
- 使用机器学习算法预测缺失值
lb = 'Education'
idx = 0
tr = np.where(df_all[lb] != -1)[0]
va = np.where(df_all[lb] == -1)[0]
df_all.iloc[va, idx] = LogisticRegression(C=1).fit(X_all[tr],
df_all.iloc[tr, idx]).predict(X_all[va])
lb = 'age'
idx = 2
tr = np.where(df_all[lb] != -1)[0]
va = np.where(df_all[lb] == -1)[0]
df_all.iloc[va, idx] = LogisticRegression(C=2).fit(X_all[tr],
df_all.iloc[tr, idx]).predict(X_all[va])
lb = 'gender'
idx = 3
tr = np.where(df_all[lb] != -1)[0]
va = np.where(df_all[lb] == -1)[0]
df_all.iloc[va, idx] = LogisticRegression(C=2).fit(X_all[tr],
df_all.iloc[tr, idx]).predict(X_all[va])
df_all = pd.concat([df_all, df_te]).fillna(0)
df_all.to_csv(cfg.data_path + 'all_v2.csv', index=None
本文介绍了几种处理数据集中缺失值的有效方法,包括删除含有缺失值的样本、使用均值、中位数或众数填充缺失值,利用特殊值填补以及采用机器学习算法预测缺失值。通过实际案例展示了如何运用Python的scikit-learn库进行缺失值处理。

被折叠的 条评论
为什么被折叠?



