Python OneHot对完整字符串数据帧进行编码

Python OneHot对完整字符串数据帧进行编码,python,pandas,numpy,tensorflow,keras,Python,Pandas,Numpy,Tensorflow,Keras,我有一个dataframe,它有6列,数据类型为string(所有数据都是string类型)。我想将数据编码为二进制向量,以便在Keras,Tensorflow中进行训练 Llower Lupper Lbody OpenStyle CloseStyle Color 0 long middle long open_equal_low open_equal_low green 1 equal short long open_

我有一个dataframe,它有6列,数据类型为
string
(所有数据都是string类型)。我想将数据编码为二进制向量,以便在
Keras
Tensorflow
中进行训练

  Llower  Lupper   Lbody        OpenStyle       CloseStyle  Color
0   long  middle    long   open_equal_low   open_equal_low  green
1  equal   short    long   open_equal_low   open_equal_low    red
2  equal  middle  middle  open_equal_high   open_equal_low    red
3  equal   short  middle  open_equal_high  open_equal_high  green
4  short   short  middle   open_equal_low  open_equal_high    red
我试着把它们编码成
int
,然后再编码成
二进制向量。
转换为
int
的我的代码:

df=df.apply(labelEncoder.fit\u变换)

结果:

   Llower  Lupper  Lbody  OpenStyle  CloseStyle  Color
0       1       2      1          2           2      1
1       0       3      1          2           2      2
2       0       2      2          1           2      2
3       0       3      2          1           1      1
4       3       3      2          2           1      2
   Llower  Lupper  Lbody  OpenStyle  CloseStyle  Color
0     0.0     0.0    0.0        0.0         0.0    0.0
1     1.0     0.0    0.0        0.0         0.0    0.0
2     1.0     0.0    0.0        0.0         0.0    0.0
3     1.0     0.0    0.0        0.0         0.0    0.0
4     0.0     0.0    0.0        0.0         0.0    0.0
当我试图用
将它们转换为\u category

df.Llower = to_categorical(df.Llower,num_classes=4)
df.Lbody = to_categorical(df.Lbody,num_classes=4)
df.Lupper = to_categorical(df.Lupper,num_classes=4)
df.OpenStyle = to_categorical(df.OpenStyle,num_classes=5)
df.CloseStyle = to_categorical(df.CloseStyle,num_classes=5)
df.Color = to_categorical(df.Color,num_classes=3)
结果:

   Llower  Lupper  Lbody  OpenStyle  CloseStyle  Color
0       1       2      1          2           2      1
1       0       3      1          2           2      2
2       0       2      2          1           2      2
3       0       3      2          1           1      1
4       3       3      2          2           1      2
   Llower  Lupper  Lbody  OpenStyle  CloseStyle  Color
0     0.0     0.0    0.0        0.0         0.0    0.0
1     1.0     0.0    0.0        0.0         0.0    0.0
2     1.0     0.0    0.0        0.0         0.0    0.0
3     1.0     0.0    0.0        0.0         0.0    0.0
4     0.0     0.0    0.0        0.0         0.0    0.0
将数据转换为二进制向量是错误的。 我如何将数据正确编码为二进制向量?(或者Tensorflow/Keras train中的任何内容都不会有任何问题)

我的第二个问题:


在编码数据之后,我必须将它们转换为
Np Array
,这是所有
float64
的代码
dataset=df.values
。这种数据类型转换(
binary vector
float64
)会对训练质量产生任何问题吗?在将数据转换为
Numpy数组
后,数据如何保持为
二进制向量?

我将使用伪列,您可以使用。简而言之,这将为原始数据帧中的每一级因子创建零或一列。这是机器学习中处理分类数据的常用方法,包括用于神经网络。例如:

pd.get_dummies(df, drop_first=True)
返回:

   Llower_long  Llower_short  Lupper_short  Lbody_middle  \
0            1             0             0             0   
1            0             0             1             0   
2            0             0             0             1   
3            0             0             1             1   
4            0             1             1             1   

   OpenStyle_open_equal_low  CloseStyle_open_equal_low  Color_red  
0                         1                          1          0  
1                         1                          1          1  
2                         0                          1          1  
3                         0                          0          0  
4                         1                          0          1  

我使用了
drop\u first=True
,因为您只需要
n-1
列,其中
n
是每个类别的级别数,因为其余信息是冗余的。如果出于这样或那样的原因想保留所有列,可以省略该参数

我不太清楚第一个问题需要什么,但我相信,一旦您的数据位于数据框中,pandas get_dummies将适用于您。对于第二个问题,我个人在np数组和pd数据帧之间转换时没有遇到任何问题,使用了一系列机器学习算法,在这种情况下,因为它只是一个分类数,我不希望出现这种情况。祝你好运