pandas数据处理基础之丢失数据处理(待续)

查看数据缺失情况:

data.isnull()##元素级别的判断,把对应的所有元素的位置都列出来,元素为空或者NA就显示True,否则就是False

df.isnull().any()##列级别的判断,只要该列有为空或者NA的元素,就为True,否则False

data[data.isnull().values==True]##可以只显示存在缺失值的行列,清楚的确定缺失值的位置。

data.columns[data.isnull().any()].tolist()   #data是dataframe对象,将为空或者NA的列找出来

data.isnull().sum() ##将列中为空的个数统计出来

通常遇到缺值的情况,我们会有几种常见的处理方式

1.如果缺值的样本占总数比例极高,我们可能就直接舍弃了,作为特征加入的话,可能反倒带入noise,影响最后的结果了

2.如果缺值的样本适中,而该属性非连续值特征属性(比如说类目属性),那就把NaN作为一个新类别,加到类别特征中

3.如果缺值的样本适中,而该属性为连续值特征属性,有时候我们会考虑给定一个step(比如这里的age,我们可以考虑每隔2/3岁为一个步长),然后把它离散化,之后把NaN作为一个type加到属性类目中

4.有些情况下,缺失的值个数并不是特别多,那我们也可以试着根据已有的值,拟合一下数据。

5.一些情况下,可以根据缺失类别情况来直接用数值填补。


对于第一种,舍弃

missing_age = train_test.drop(['Survived','Cabin','Ticket','Name'],axis=1)##删除对应列,survived,cabin等各列

对于第二种,将缺失数据变成新类别

data_train.loc[ (df.Cabin.notnull()), 'Cabin' ] = "Yes" ##将df数据的df.cabin的非空数据转换成yes
data_train[ (df.Cabin.isnull()), 'Cabin' ] = "No" ##将df数据的df。cabin的空白数据转换成no
##将数据yes补全成为1,no补全成为0,并且将数据此列分为两列,前缀是'Cabin'
dummies_Cabin = pd.get_dummies(data_train['Cabin'], prefix= 'Cabin')

对于第三种情况,待续

 

对于第四种情况,根据已经有的数据进行拟合

    age_df=df[['Age','Fare','Parch','SibSp','Pclass']] ##预测数据y和特征变量x
    known_age = age_df[age_df.Age.notnull()].values ##将已经拥有的age数据变为训练集
    unknown_age=age_df[age_df.Age.isnull()].values ##将空缺age的数据变成测试集
    ##y即为目标年龄
    y=known_age[:,0]
    ##X为特征属性值
    X=known_age[:,1:]
    #fit到random forest,使用随机森林算法预测
    rfr = RandomForestRegressor(random_state=0, n_estimators=2000, n_jobs=-1)
    rfr.fit(X, y)
    # 用得到的模型进行未知年龄结果预测
    predictedAges = rfr.predict(unknown_age[:, 1:])
    # 用得到的预测结果填补原缺失数据
    df.loc[(df.Age.isnull()), 'Age'] = predictedAges

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值