在对不同类型的缺失值分别填充时,可能需要不同的填充方式,例如对于连续数值型的可能需要使用均值填充,对于非数值型的数据也许使用众数填充更合适。
在进行众数填充时,按照教程书写时遇到了的问题,无论如何也填充不进去。
先看原代码:
#数值型数据使用均值填充
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)