我试图将一个列转换为一个数据集,其中有'负'和'正'的二进制或可编号的项目,如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布尔值和任何不等于"正"的值;为假。然后你可以很容易地转换为整数类型,等等…。