2016-08-01 168 views
5

我有以下数据框:如何将pandas DataFrame中的值二进制化?

df = pd.DataFrame(['Male','Female', 'Female', 'Unknown', 'Male'], columns = ['Gender']) 

我想将其转换为与列“男”,“女”和“未知”值0和1表示性别一个数据帧。

Gender Male Female 
Male  1  0 
Female 0  1 
     . 
     . 
     . 
     . 

为此,我编写了一个函数并使用map调用函数。

def isValue(x , value): 
if(x == value): 
    return 1 
else: 
    return 0 


for value in df['Gender'].unique(): 
    df[str(value)] = df['Gender'].map(lambda x: isValue(str(x) , str(value))) 

这是完美的。但有没有更好的方法来做到这一点?我可以使用sklearn包中的任何内置函数吗?

回答

4

是的,有一个更好的方法来做到这一点。这就是所谓的pd.get_dummies

pd.get_dummies(df) 

enter image description here

要复制你有什么:

order = ['Gender', 'Male', 'Female', 'Unknown'] 
pd.concat([df, pd.get_dummies(df, '', '').astype(int)], axis=1)[order] 

enter image description here

2

我的选择是pd.get_dummies()。是的,有sklearn方法。

从文档:

>>> from sklearn.preprocessing import OneHotEncoder 
>>> enc = OneHotEncoder() 
>>> enc.fit([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]]) 
OneHotEncoder(categorical_features='all', dtype=<... 'float'>, 
     handle_unknown='error', n_values='auto', sparse=True) 
>>> enc.n_values_ 
array([2, 3, 4]) 
>>> enc.feature_indices_ 
array([0, 2, 5, 9]) 
>>> enc.transform([[0, 1, 1]]).toarray() 
array([[ 1., 0., 0., 1., 0., 0., 1., 0., 0.]]) 

http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html

相关问题