Skip to main content
 首页 » 编程设计

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

2025年05月04日12jackei

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

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

例如

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 

请您参考如下方法:

如果你有 pandas,这就很简单了。

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 

使用replace将0转换为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 

数据框的解决方案相同。