我试图在包含缺失数据的数据集中保留行。
使用sklearn对列(或多列)进行单热编码。是否可以编写if currentItem == null
或if 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
答案 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
使用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
数据框的解决方案是相同的。
答案 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')