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

python使用pandas填补缺失值——众数填充失败:,第1张

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)

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/868899.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-13
下一篇 2022-05-13

发表评论

登录后才能评论

评论列表(0条)

保存