如何在pandas DataFrame中对值进行二值化?

时间:2016-08-01 17:15:57

标签: python pandas dataframe scikit-learn

我有以下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包中的内置函数吗?

2 个答案:

答案 0 :(得分:6)

是的,有更好的方法可以做到这一点。它被称为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

答案 1 :(得分:3)

我的偏好是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