如何使用pandas将字符串或对象列项转换为二进制



我试图将一个列转换为一个数据集,其中有'负'和'正'的二进制或可编号的项目,如0和1,但我不知道我是否在做正确的Pandas库。

pd.cut(data.Class, bins=['negative','positive'],labels=['0','1'])

,但出现以下错误:

ValueError: could not convert string to float: 'negative' 

数据集示例:

v8      v9      Class  
0    0.00000  0.1224   negative  
1    0.00000  0.0000   negative  
2    0.00000  0.0000   negative  
3    0.00000  0.0000   negative  
4    0.00000  0.0561   negative  
..       ...     ...        ...  
166  0.66150  0.0000   negative  
167  1.06155  0.0000   negative  
168  1.62855  0.0000   negative  
169  1.71045  0.0000   positive  
170  1.54980  0.0000   positive

我希望结果如下:

v8      v9   Class  
0    0.00000  0.1224   0  
1    0.00000  0.0000   0  
2    0.00000  0.0000   0  
3    0.00000  0.0000   0  
4    0.00000  0.0561   0  
..       ...     ...    ...  
166  0.66150  0.0000   0  
167  1.06155  0.0000   0  
168  1.62855  0.0000   0  
169  1.71045  0.0000   1  
170  1.54980  0.0000   1  

pandas.cut()argbins=需要是数字,根据文档:

bins: binsint,标量序列,或IntervalIndex

…所以你的方法行不通。试试下面这些:

# mapping
mapper = {'negative': 0, 'positive': 1}
df['Class'] = df['Class'].map(mapper)
# or numpy where
df['Class'] = numpy.where(df['Class'] == 'negative', 0, 1)
# or boolean mask
mask = df['Class'] == 'negative'
df.loc[mask, 'Class'] = 0
df.loc[~mask, 'Class'] = 1

应该给出相同的结果:

v8      v9 Class
0  0.00000  0.1224     0
1  0.00000  0.0000     0
2  0.00000  0.0000     0
3  0.00000  0.0000     0
4  0.00000  0.0561     0
5  0.66150  0.0000     0
6  1.06155  0.0000     0
7  1.62855  0.0000     0
8  1.71045  0.0000     1
9  1.54980  0.0000     1

如果值只有'负'和'正',我可能会使用以下内容构建一个新列:

data['BinaryClass'] = data['Class'] == 'positive'

这将把任何等于字符串"正"为True布尔值和任何不等于"正"的值;为假。然后你可以很容易地转换为整数类型,等等…。

最新更新