python填充空值_python缺失值填充的几种方法

常见的数据缺失填充方式分为很多种,比如删除法、均值法、回归法、KNN、MICE、EM等等。R语言包中在此方面比较全面,python稍差。

python目前已有的两种常见的包,第一个是impyute,第二个是fancyimpute。比如fancyimpute中集成了很多方式,包括均值、众数、频数填充,KNN填充、MCMC填充等。

一、直接填充

0值/-1值填充

data = pd.read_csv(path,encoding='gbk')

data = data.fillna(-1)1

2

单变量填补

用单一变量的均值/中位数/二分之一最小值/零值进行补值,这种方法会导致数据分布的偏移,方差偏小,PCA上会看到一条补值导致的直线等问题。

二、插值填充

data = pd.read_csv(path,encoding='gbk')

for f in data: # 插值法填充

data[f] = data[f].interpolate()

data.dropna(inplace=True)1

2

3

4

interpolate函数默认采用线性插值,即假设函数是直线形式,缺失值用前一个值和后一个值的平均数填充。

还可以根据数字来进行插值,用到参数method=‘values’,此时索引的数值实际上就是用于估计y的x值。

如果index是时间,我们还可以用method=time来插值。不过当dataframe是多重索引(multiIndex)时,只能用线性插值。

此外还可以通过参数设定采用多项式插值填充等方式。

参考:

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.interpolate.html

https://jingyan.baidu.com/article/a501d80cf7c9c3ec620f5e5a.html

三、KNN预测缺失值进行填充

这里使用的是fancyimpute库,安装的时候需要visual C++环境。

from fancyimpute import KNN

data = pd.read_csv(path,encoding='gbk')

data = pd.DataFrame(KNN(k=6).fit_transform(data))

data.columns = ['sex','age','label'] # fancyimpute填补缺失值时会自动删除列名1

2

3

4

5

注意fancyimpute的KNN填补会自动去除DataFrame数据的列名,所以如果后续操作对列名有要求,需要重新添加列名。

四、可视化

见本人的另一篇博文。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值