【发布时间】:2019-04-17 15:42:16
【问题描述】:
我有一个如下数据框:
test = {"viral": "pos", "Status": "positive", "Age": 59, "score": 5}
test2 = {"viral": "neg"}
df = pd.DataFrame.from_dict([test, test2])
我想将字符列(病毒、状态)编码为序数,但不考虑数值。所需的输出是具有相同列名的 numpy 数组。
如果我使用 sklearn 中的 OrdinalEncoder,它不会处理 NaN 值。即使没有 NaN 值,它仍然会对数字列进行序数编码。我想在字符列中用 0 填充 NaN 值,但在数字列中保留 NaN。
最简单的方法是什么?
所需的输出(在 numpy 数组中):
Age Status score viral
0 59.0 1 5.0 1
1 NaN 0 NaN 0
谢谢! 杰克
编辑:当使用enc=OrdinalEncoder() 时,我还想要从编码值到原始值的映射,例如{i: dict(enumerate(v)) for i, v in enumerate(enc.categories_)}(请参阅Vectorize 2D character array column-wise)
【问题讨论】:
-
你是怎么知道
pos和positive都映射到1的?或者这只是一个巧合,即不是一个要求? -
@jpp 不是要求 :) 只要我可以将原始值映射回最终编码值,数字的映射方式并不重要。
标签: python pandas numpy scikit-learn