将dtype = object转换为dtype ='| S5'

时间:2017-04-19 09:54:31

标签: python arrays string pandas scikit-learn

我有一个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'类型?

EDIT1

当我做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']而不是索引?

1 个答案:

答案 0 :(得分:2)

您可以使用astype投射dtype的{​​{1}},通常我会选择Series,但如果您坚持使用numpy类型str那么你可以通过这个:

'|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 在这里的含义,如果你的混合dtypes不是全部数字或object那么str这里指的是python对象,这是预期和正确的行为< / p>