我使用下面的代码对数据集进行编码:
foo= pd.DataFrame({
'Col1' : ['B', 'A', 'B', 'C', 'B', 'A', 'C'],
'Val' : np.random.randn(7)
})
r=pd.factorize(foo['Col1'], sort=True)
foo['Col1'] = r[0]
将生成以下正确结果(before\after):
^{pr2}$而且(由于“sort”),我还可以通过运行来构建key\value之间的映射函数-这是我的目标:
zip( np.unique(r[0]), r[1])
[(0, 'A'), (1, 'B'), (2, 'C')] # A became 0; B became 1 and so on...
我的问题是当我在数据集上有nan时,它们得到-1(这正是我想要的-它必须是-1):
foo= pd.DataFrame({
'Col1' : ['B', 'A', 'B', 'C', 'B', 'A', np.nan],
'Val' : np.random.randn(7)
})
r=pd.factorize(foo['Col1'], sort=True)
foo['Col1'] = r[0]
Col1 Val Col1 Val
B 1.397748 1 1.397748
A -1.011483 0 -1.011483
B 0.679650 1 0.679650
C 0.861900 2 0.861900
B -0.430241 1 -0.430241
A 1.472984 0 1.472984
NaN 0.549857 -1 0.549857
但是pd.因子分解不返回索引上的“nan”:
print r[1]
Index([u'A', u'B', u'C'], dtype='object')
现在我的映射函数不起作用了:
zip( np.unique(r[0]), r[1])
Out[148]: [(-1, 'A'), (0, 'B'), (1, 'C')]
有没有办法pd.因子分解函数是否返回其索引对象的nan?在
谢谢
如果您可以保证
r[0]
中-1
的唯一原因是数据集中的np.nan
,那么可以使用以下函数获得所需的映射:由于列中包含
float
+str
的数据类型,因此Nans
中存在pd.factorize
在分配-1值(默认值)后排除丢失的值。在另一种方法是计算序列中存在的唯一值,然后将其转换为
categorical
dtype,后者还通过codes
属性为Nans
分配值-1。在演示:
相关问题 更多 >
编程相关推荐