python使用pandas填补缺失值——众数填充失败:

python使用pandas填补缺失值——众数填充失败:

在对不同类型的缺失值分别填充时,可能需要不同的填充方式,例如对于连续数值型的可能需要使用均值填充,对于非数值型的数据也许使用众数填充更合适。


问题描述

在进行众数填充时,按照教程书写时遇到了的问题,无论如何也填充不进去。
先看原代码:

#数值型数据使用均值填充
train[numerical_fea] = train[numerical_fea].fillna(train[numerical_fea].median())
#非数值型数据使用众数填充
train[category_fea] = train[category_fea].fillna(train_data[category_fea].mode())

原因分析:

分析数据类型

这里输出一下数据类型看看:
发现前者median()的输出是series类型,而后者mode()的输出是dataframe类型,也许这是造成无法直接加入的元凶。

print(type(train[numerical_fea].median()))
print(type(train[category_fea].mode()))

解决方案:

将dataframe转化成series

可以先将dataframe打印出来,看看众数是否都只有一个,在本项目中是的,只需要取出df中的第一行就能得到series了。

train[category_fea] = train[category_fea].fillna(train[category_fea].mode().iloc[0,:])

之前更多教程的写法也无法奏效,贴在这里:
很多人的教程这样写,不确定是什么原因,但是我的执行时会出现错误。

train[category_fea] = train[category_fea].fillna(train[category_fea].mode()[0])

同时,直接添加数值的时候,可能需要使用inplace参数,如下:
我是没有遇到这种情况啦——

train[numerical_fea] = train[numerical_fea].fillna(0,inplace = True)

你可能感兴趣的:(python,数据挖掘,开发语言)