我有一个csv文件,该文件通过pandas加载,如下所示:

classes_dataset2=pd.read_csv("labels.csv")
classes_dataset2[0:10]

0    A
1    A
2    N
3    N
4    O
5    O
6    5
7    5
8    P
9    P
Name: label, dtype: object


在以下情况下不接受此dtype: object

from sklearn.preprocessing import LabelBinarizer
encoder=LabelBinarizer()
classes_dataset = encoder.fit_transform(classes_dataset2)


我得到了以下错误

ValueError: Mix of label input types (string and number)


这就是为什么我想将dtype从对象转换为dtype='|S5'以便获得如下标签的原因:

array(['A', 'A', 'N', 'N', 'O', 'O', '5', '5', 'P', 'P'],
      dtype='|S5')


我如何将对象类型转换为'| S5'类型?

编辑1

当我做classes_dataset2.astype('|S5')

from sklearn.preprocessing import LabelBinarizer
encoder=LabelBinarizer()
classes_dataset = encoder.fit_transform(classes_dataset2.astype('|S5'))


我没有错误。似乎有效。但是,我想知道是否需要

['A','A','N','N','O','O','5','5,'P','P']或
[0,1,2,.. 9]?
您能向我确认需要吗:
['A','A','N','N','O','O','5','5,'P','P'],而不是索引?

最佳答案

您可以使用astype强制转换dtypeSeries,通常我会选择str,但是如果您坚持使用numpy类型的'|S5',则可以通过以下操作:

In [16]:
s = pd.Series(['A','A', 'N', 'N', 'O', 'O', 5, 5, 'P','P'])
s

Out[16]:
0    A
1    A
2    N
3    N
4    O
5    O
6    5
7    5
8    P
9    P
dtype: object

In [18]:
s.astype('|S5')

Out[18]:
0    b'A'
1    b'A'
2    b'N'
3    b'N'
4    b'O'
5    b'O'
6    b'5'
7    b'5'
8    b'P'
9    b'P'
dtype: bytes40


指的是object在这里的意思,如果您混合的dtype不是全部为数字或不是str,则object此处是指python对象,这是预期的正确行为

关于python - 将dtype =对象转换为dtype ='| S5',我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43492277/

10-12 00:23
查看更多