【问题标题】:Convert dtype= object to dtype='|S5'将 dtype= 对象转换为 dtype='|S5'
【发布时间】:2017-09-15 11:30:21
【问题描述】:

我有一个 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'] 而不是索引?

【问题讨论】:

  • classes_dataset2.astype(str) 工作吗?
  • 是的,它可以工作,但它会打印 0 A 1 A 2 N 3 N 4 O 5 O 6 5 7 5 8 P 9 P 名称:标签,数据类型:对象
  • object 仅表示 python 对象,实际元素 dtypes 为 str,这是预期行为
  • 确实,是的。但是出于我解释的原因,我需要在“|S5”中的数据
  • 它转换元素而不是索引,你必须做classes_dateset2.index.astype('|S5')来修改索引

标签: python arrays string pandas scikit-learn


【解决方案1】:

您可以使用astype 来转换Seriesdtype,通常我会选择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 的含义,如果你有混合的dtypes 不是全数字或者str 那么object 这里指的是python 对象,这是预期和正确的行为

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-03
    • 2018-06-11
    • 2018-07-04
    • 2023-03-16
    • 2014-11-15
    相关资源
    最近更新 更多