one-hot encoding单个样本pandas

时间:2016-12-23 09:00:27

标签: python pandas encoding

问题陈述:我想对这个单一样本进行单热编码:

In [2]: single_sample = pd.DataFrame({"Color":['Green']})

             Color 
0            'Green'   

使用与此数据帧相同的单热编码:

In [3]: df = pd.DataFrame({"Color":['Red', 'Blue', 'Green', 'Orange']})

             Color 
0            'Red'         
1            'Blue'     
2            'Green'       
3            'Orange'

应用one-hot编码后,大数据帧看起来像;

In [4]: pd.get_dummies(df)

      Color_Blue  Color_Green  Color_Orange  Color_Red
0              0            0             0          1
1              1            0             0          0
2              0            1             0          0
3              0            0             1          0

我想要单个样本;

      Color_Blue  Color_Green  Color_Orange  Color_Red
0              0            1             0          0

我想到实现这一目标的唯一方法是将单个样本连接到数据帧,然后执行单热编码操作或编写我自己的单热编码器,我可以将其应用于给定的列。

是否有更好的方法以某种方式保存操作.get_dummies()函数适用?

1 个答案:

答案 0 :(得分:3)

您可以按df1

列使用reindex
df1 = pd.get_dummies(df)
print (df1)
   Color_Blue  Color_Green  Color_Orange  Color_Red
0           0            0             0          1
1           1            0             0          0
2           0            1             0          0
3           0            0             1          0

print (pd.get_dummies(single_sample).reindex(columns=df1.columns, fill_value=0))
   Color_Blue  Color_Green  Color_Orange  Color_Red
0           0            1             0          0

另一种可能的解决方案是按list comprehension创建新列:

cols = ('Color_' + df.Color.sort_values()).unique().tolist()
print (cols)
['Color_Blue', 'Color_Green', 'Color_Orange', 'Color_Red']

print (pd.get_dummies(single_sample).reindex(columns=cols, fill_value=0))
   Color_Blue  Color_Green  Color_Orange  Color_Red
0           0            1             0          0