如何将pandas DataFrame中的值二值化?

Rak*_*van 6 python dataframe pandas scikit-learn

我有以下DataFrame:

df = pd.DataFrame(['Male','Female', 'Female', 'Unknown', 'Male'], columns = ['Gender'])
Run Code Online (Sandbox Code Playgroud)

我想将此转换为DataFrame,列为'Male','Female'和'Unknown',值0和1表示Gender.

Gender  Male  Female
Male     1      0
Female   0      1
       .
       .
       .
       .
Run Code Online (Sandbox Code Playgroud)

为此,我编写了一个函数并使用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)))
Run Code Online (Sandbox Code Playgroud)

哪个效果很好.但是有更好的方法吗?我可以使用任何sklearn包中的内置函数吗?

piR*_*red 6

是的,有一种更好的方法可以做到这一点.它被称为pd.get_dummies

pd.get_dummies(df)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

要复制你拥有的东西:

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

在此输入图像描述