sklearn - 如何在单热编码时合并丢失的数据

时间:2018-01-04 07:34:09

标签: python numpy scikit-learn

我试图在包含缺失数据的数据集中保留行。

使用sklearn对列(或多列)进行单热编码。是否可以编写if currentItem == nullif currentItem == 0然后将输出数组设置为全0的规则?

e.g。

A A B - > [[1, 0], [1, 0], [0,1]]

B B A - > [[0, 1], [0, 1], [1,0]]

null B A - > [[0, 0], [0, 1], [1,0]]

单热编码:

import numpy as np
from sklearn.preprocessing import LabelEncoder


dataset = np.loadtxt("someFile.csv", delimiter=",")
B = dataset[:,1]

encoder = LabelEncoder()
encoder.fit(B)
encoded_B = encoder.transform(B)

Y = to_categorical(encoded_B)

编辑 - 示例数据集: 其中A-E是输入,X& Y和输出

A     B     C     D     E     X      Y
7     6     3     3     2     11     4
5     6     0     0     7     15     7
3     3     9     null  7     12     7
7     null  7     null  7     12     13
null  7     4     6     12    13     4
null  5     7     6     null  14     7
2     6     0     0     2     13     3
7     null  7     null  2     13     7

3 个答案:

答案 0 :(得分:5)

如果你有熊猫,这很简单。

s = pd.Series(['A', 'A', 0, 'B', 0, 'A', np.nan])
s

0      A
1      A
2      0
3      B
4      0
5      A
6    NaN
dtype: object

使用replace0转换为NaN -

s = s.replace({0 : np.nan, '0' : np.nan})
s

0      A
1      A
2    NaN
3      B
4    NaN
5      A
6    NaN
dtype: object

现在,请致电pd.get_dummies,忽略NaN值。

pd.get_dummies(s)

   A  B
0  1  0
1  1  0
2  0  0
3  0  1
4  0  0
5  1  0
6  0  0

数据框的解决方案是相同的。

答案 1 :(得分:0)

或者,您可以尝试使用pandas fillna()方法。 (来源:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.fillna.html)假设您有一个名为df的数据框。然后,您可以执行以下操作:

df = df.fillna(0)

NaN中的所有df都转换为零,然后再进行一次热编码。

答案 2 :(得分:0)

我建议您将nan值替换为“ none”,这将引入更多列 即df_encoding_variables = df_encoding_variables.replace(np.nan,'None')