如何通过pandas get_dummies()方法为某些列创建虚拟对象?

Jac*_*ack 15 python pandas

df = pd.DataFrame({'A': ['x', 'y', 'x'], 'B': ['z', 'u', 'z'],
                  'C': ['1', '2', '3'],
                  'D':['j', 'l', 'j']})
Run Code Online (Sandbox Code Playgroud)

我只是希望A列和D列不是B pd.get_dummies(df)列的假人.如果我使用了,所有列都变成了假人.

我希望最终结果包含所有列,这意味着列C和列B退出,如'A_x','A_y','B','C','D_j','D_l'.

kna*_*aev 35

它可以在没有连接的情况下完成,使用带有必需参数的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
Run Code Online (Sandbox Code Playgroud)


Ste*_*fan 8

只需选择您想要的两列.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
Run Code Online (Sandbox Code Playgroud)


小智 6

除了上面的完美答案,如果您有一个包含大量属性的大型数据集,并且不想手动指定所需的所有虚拟变量,则可以设置差异:

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)
Run Code Online (Sandbox Code Playgroud)