我有一个名为smoking_status的特性,它有三个不同的值:
1)吸烟
( 2)以前吸烟
3)从不吸烟
功能列(smoking_status)有3个以上的值以及许多NaN值--因为我的数据不是数字的,所以如何处理NaN值,如果是数值的话,我可以使用median或mean替换它。在我的情况下,如何替换NaN值?

发布于 2018-04-14 06:31:27
可能有两个比用NaN取代unknown更好的选择--至少在数据科学挑战的背景下,我认为这是:
mode)。获得最普遍的价值是很容易的。对于这个目的,您可以使用<column>.value_counts()来获取频率,然后是一个.idxmax(),它为您提供了来自value_counts()的索引元素,并具有较高的频率。在那之后你只需要打电话给fillna()
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()))给予:
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发布于 2018-04-14 06:25:31
您没有这些行的数据。您可以简单地填充它的中值或平均值,这是该特性中最常见的值。但在这种情况下,考虑到这个特性,这是个坏主意。
一个更好的方法是用一个字符串填充‘未知’/‘na’。
df['smoking_status'].fillna('NA')然后,您可以对其进行标签编码或将列转换为一种热编码。
发布于 2018-04-14 06:27:01
看起来问题是关于方法论的,而不是技术问题。
所以你可以试试
( 1)三者中最常见的价值;
2)使用数据集的其他分类字段统计数据(如最常见的吸烟状态组);
3)随机值;
4)“未知”类别
然后,你可以做一个热编码和绝对检查您的模型交叉验证,以选择正确的方式。
还有更棘手的方法:使用此状态作为目标变量,并尝试使用所有其他数据来预测那些使用scikit的NaNs。
https://stackoverflow.com/questions/49828554
复制相似问题