Python数据预处理:2.处理缺失值 下载 UCI 数据集中的“匹兹堡的桥” (https://archive.ics.uci.edu/ml/datasets/Pittsburgh+Bridges,

2.处理缺失值
下载 UCI 数据集中的“匹兹堡的桥”
(https://archive.ics.uci.edu/ml/datasets/Pittsburgh+Bridges, 选择其中的
bridges.data.version1 部分)。对该数据集中出现的缺失值(用?表示),选择一个数值列,
用平均值填充;选择一个离散列(离散型取值),用众数填充。
说明:
(1)建议放入数据集的特征名。
(2)建议将缺失值用 np.nan 代替。
(3)建议使用 sklearn.impute.SimpleImputer 来实现。
在这里插入图片描述

首先是用nan填充了’?‘等缺失值,然后用pandas的describe方法对其中的数据进行分析,根据describe中的unique(种类)、freq(众数)大小分析出了数值列[2,5]和离散列[6,7,8,9,10,11,12],然后使用SimpleImputer模块对缺失值进行填充
imp = SimpleImputer(missing_values=’?’, strategy=‘constant’,fill_value=np.nan),其中显而易见的,missing_values是缺失值,strategy是填充类型,fill_value是当strategy为constant时的自定义的填充值,接着是使用其内置函数进行填充和转换imp.fit(data_imp)、data2 = imp.transform(data_imp)
还需注意填充后是对某一列进行填充,所以要定位到其中的列(数值列和离散列)
仅附上一个数值列的填充和离散列的填充,希望以后还记得举一反三咯(ctl+c,ctl+v):

from sklearn.impute import SimpleImputer
import pandas as pd
import numpy as np
data = pd.read_csv(r'bridges.data.version1',header=None)
#将缺失值化为nan
data_imp = data
imp = SimpleImputer(missing_values='?', strategy='constant',fill_value=np.nan)
imp.fit(data_imp)
data2 = imp.transform(data_imp)
print(data2)
#将数值列2的缺失值用均值填充
data_mean = data2[:,2].reshape(-1,1)
imp_mean = SimpleImputer(missing_values=np.nan, strategy='mean')
data3 = imp_mean.fit_transform(data_mean)
data2[:,2] = data3[:,0]
print(pd.DataFrame(data2[:,2]).isnull().sum())
#将离散列6用众数填充
data_most1 = data2[:,6].reshape(-1,1)
imp_most1 = SimpleImputer(missing_values=np.nan, strategy='most_frequent')
data4 = imp_most1.fit_transform(data_most1)
data2[:,6] = data4[:,0]
print(set(data4[:,0]))
print(pd.DataFrame(data2[:,6]).isnull().sum())
.
.
.
.
#最后填充完的结果数据集判断:
print(data2)
print(pd.DataFrame(data2).isnull().sum())

猜你喜欢

转载自blog.csdn.net/missionnn/article/details/121191260