:(後\前に)次の正しい結果を生成ナンIデータセット符号化するには以下のコードを使用してい
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]
:
Col1 Val Col1 Val
B 0.094336 1 0.094336
A -0.422168 0 -0.422168
B -0.750304 1 -0.750304
C 1.910625 2 1.910625
B 0.921890 1 0.921890
A 0.422612 0 0.422612
C -1.130780 2 -1.130780
print r
(array([1, 0, 1, 2, 1, 0, 2]), Index([u'A', u'B', u'C'], dtype='object'))
および(「ソート」のため)私はキーの値と実行の間のマッピング関数を作成することもできます - 私の目標は
zip(np.unique(r[0]), r[1])
[(0, 'A'), (1, 'B'), (2, 'C')] # A became 0; B became 1 and so on...
私の問題i sの私は、データセットに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.factorizeは、上の「ナン」を返していませんインデックス:
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.factorize機能は、そのインデックスのオブジェクトにはNaNを返すようにする方法?
おかげ