df = pd.DataFrame({'A': ['x', 'y', 'x'], 'B': ['z', 'u', 'z'],
'C': ['1', '2', '3'],
'D':['j', 'l', 'j']})
我只是希望A列和D列不是B列的假人。如果我使用pd.get_dummies(df)
,所有列都变成了傻瓜。
我希望最终结果包含所有列,这意味着列C和列B退出,如'A_x','A_y','B','C','D_j','D_l'
。
它可以在没有连接的情况下完成,使用带有必需参数的get_dummies()
In [294]: pd.get_dummies(df, prefix=['A', 'D'], columns=['A', 'D'])
Out[294]:
B C A_x A_y D_j D_l
0 z 1 1.0 0.0 1.0 0.0
1 u 2 0.0 1.0 0.0 1.0
2 z 3 1.0 0.0 1.0 0.0
添加上述完美答案,如果您有一个包含大量属性的大数据集,如果您不想手动指定所需的所有虚拟对象,您可以设置差异:
len(df.columns) = 50
non_dummy_cols = ['A','B','C']
# Takes all 47 other columns
dummy_cols = list(set(df.columns) - set(non_dummy_cols))
df = pd.get_dummies(df, columns=dummy_cols)
只需选择你想要的两列.get_dummies()
- column
名称表示源列和变量标签表示为二进制变量,pd.concat()
表示您想要保持原始列:
pd.concat([pd.get_dummies(df[['A', 'D']]), df[['B', 'C']]], axis=1)
A_x A_y D_j D_l B C
0 1.0 0.0 1.0 0.0 z 1
1 0.0 1.0 0.0 1.0 u 2
2 1.0 0.0 1.0 0.0 z 3