2016-12-16 64 views
4

我试图对数据框的一列进行一次热编码。如何对熊猫数据框的一列进行单热编码?

enc = OneHotEncoder() 
minitable = enc.fit_transform(df["ids"]) 

但是我却越来越

DeprecationWarning:传递一维数组作为数据在0.17 弃用,在0.19 willraise ValueError异常。

有没有解决方法呢?

+0

'minitable = enc.fit_transform(df [[“ids”]])'没有警告地工作? – EdChum

回答

6

我认为你可以使用get_dummies

df = pd.DataFrame({'ids':['a','b','c']}) 

print (df) 
    ids 
0 a 
1 b 
2 c 

print (df.ids.str.get_dummies()) 
    a b c 
0 1 0 0 
1 0 1 0 
2 0 0 1 

编辑:

如果输入与lists列,第一投地str,由strip删除[]并调用get_dummies

df = pd.DataFrame({'ids':[[0,4,5],[4,7,8],[5,1,2]]}) 

print(df) 
     ids 
0 [0, 4, 5] 
1 [4, 7, 8] 
2 [5, 1, 2] 

print (df.ids.astype(str).str.strip('[]').str.get_dummies(', ')) 
    0 1 2 4 5 7 8 
0 1 0 0 1 1 0 0 
1 0 0 0 1 0 1 1 
2 0 1 1 0 1 0 0 
+0

我需要转换为字符串。它可以用整数和不铸造完成吗? – Bob

+0

问题是使用'print(df.ids.str.get_dummies()。astype(str))'? – jezrael

+0

当ids是一个整数列表 – Bob

相关问题