sklearn与pandas的缺失值处理
生活随笔
收集整理的這篇文章主要介紹了
sklearn与pandas的缺失值处理
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
housing數據集中的total_bedrooms有部分缺失,對于缺失值,通常我們有以下幾種方式處理:
- 放棄有缺失值的樣本
- 放棄整個特征
- 將缺失值設置為某個默認值:0、平均值、中位數等。
pandas方式
通過DataFrame的dropna(), drop()和fillna()函數,可以方便的實現以上3個功能:
housing.dropna(subset=['total_bedrooms']) housing.info()housing.drop('total_bedrooms', axis = 1) housing.info()median = housing['total_bedrooms'].median() housing['total_bedrooms'].fillna(median,inplace=True) housing.info() <class 'pandas.core.frame.DataFrame'> RangeIndex: 20640 entries, 0 to 20639 Data columns (total 10 columns):# Column Non-Null Count Dtype --- ------ -------------- ----- 0 longitude 20640 non-null float641 latitude 20640 non-null float642 housing_median_age 20640 non-null float643 total_rooms 20640 non-null float644 total_bedrooms 20640 non-null float645 population 20640 non-null float646 households 20640 non-null float647 median_income 20640 non-null float648 median_house_value 20640 non-null float649 ocean_proximity 20640 non-null object dtypes: float64(9), object(1) memory usage: 1.6+ MBsklearn方式
使用pandas方式需要對每個屬性進行處理,我們使用sklearn來批量處理整個數據集的所有屬性。
sklearn提供了一個非常容易上手的類來處理缺失值:Simpleimputer。同時,由于中位數只能在數值類屬性上計算,所以我們需要創建一個沒有文本屬性ocean_proximity的數據副本:
from sklearn.impute import SimpleImputer imputer = SimpleImputer(strategy = 'median') housing_num = housing.drop('ocean_proximity', axis=1)# fit、transform,然后轉換回DataFrame imputer.fit(housing_num) X = imputer.transform(housing_num) housing_num_pd = pd.DataFrame(X, columns=housing_num.columns, index=housing_num.index)我們可以看一下各個屬性的中位數:
print(imputer.statistics_) print(housing_num.median().values) [-1.1849e+02 3.4260e+01 2.9000e+01 2.1270e+03 4.3500e+02 1.1660e+034.0900e+02 3.5348e+00 1.7970e+05] [-1.1849e+02 3.4260e+01 2.9000e+01 2.1270e+03 4.3500e+02 1.1660e+034.0900e+02 3.5348e+00 1.7970e+05]總結
以上是生活随笔為你收集整理的sklearn与pandas的缺失值处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: numpy和pandas的数据乱序
- 下一篇: 数值分箱与one-hot