首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何替换NaN值?

如何替换NaN值?
EN

Stack Overflow用户
提问于 2018-04-14 06:17:52
回答 4查看 5.2K关注 0票数 0

我有一个名为smoking_status的特性,它有三个不同的值:

1)吸烟

( 2)以前吸烟

3)从不吸烟

功能列(smoking_status)有3个以上的值以及许多NaN值--因为我的数据不是数字的,所以如何处理NaN值,如果是数值的话,我可以使用medianmean替换它。在我的情况下,如何替换NaN值?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-04-14 06:31:27

可能有两个比用NaN取代unknown更好的选择--至少在数据科学挑战的背景下,我认为这是:

  • 将其替换为最常用的值 (mode)。
  • 使用所拥有的数据预测丢失的值

获得最普遍的价值是很容易的。对于这个目的,您可以使用<column>.value_counts()来获取频率,然后是一个.idxmax(),它为您提供了来自value_counts()的索引元素,并具有较高的频率。在那之后你只需要打电话给fillna()

代码语言:javascript
复制
import pandas as pd
import numpy as np

df = pd.DataFrame(['formerly', 'never', 'never', 'never', 
                   np.nan, 'formerly', 'never', 'never', 
                   np.nan, 'never', 'never'], columns=['smoked'])

print(df)
print('--')
print(df.smoked.fillna(df.smoked.value_counts().idxmax()))

给予:

代码语言:javascript
复制
     smoked
0   formerly
1      never
2      never
3      never
4        NaN
5   formerly
6      never
7      never
8        NaN
9      never
10     never
--
0     formerly
1        never
2        never
3        never
4        never
5     formerly
6        never
7        never
8        never
9        never
10       never
票数 2
EN

Stack Overflow用户

发布于 2018-04-14 06:25:31

您没有这些行的数据。您可以简单地填充它的中值或平均值,这是该特性中最常见的值。但在这种情况下,考虑到这个特性,这是个坏主意。

一个更好的方法是用一个字符串填充‘未知’/‘na’。

代码语言:javascript
复制
df['smoking_status'].fillna('NA')

然后,您可以对其进行标签编码或将列转换为一种热编码。

票数 0
EN

Stack Overflow用户

发布于 2018-04-14 06:27:01

看起来问题是关于方法论的,而不是技术问题。

所以你可以试试

( 1)三者中最常见的价值;

2)使用数据集的其他分类字段统计数据(如最常见的吸烟状态组);

3)随机值;

4)“未知”类别

然后,你可以做一个热编码和绝对检查您的模型交叉验证,以选择正确的方式。

还有更棘手的方法:使用此状态作为目标变量,并尝试使用所有其他数据来预测那些使用scikit的NaNs。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49828554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档