【问题标题】:How to change dtype of array of objects to string如何将对象数组的 dtype 更改为字符串
【发布时间】:2021-04-06 22:48:37
【问题描述】:

我的问题类似于这个问题How to solve the AttributeError:'list' object has no attribute 'astype'? 但是,我正在尝试创建一系列字符串,以便在图中绘制。

 feature_names = df.iloc[:,maxIndex].columns
 newMaxName.append(feature_names)
 newMaxName = np.array(newMaxName, dtype =np.str)
 newMaxName

所以它给了我输出

array(['shar', 'dec', 'intel', 'like', 'amb', 'met', 'pid', 'prob_o', 'pf_o_sin','pf_o_att','pf_o_sha','pf_o_fun','age_o', 'pf_o_amb'、'pf_o_int'、'attr_o'、'attr'、'attr2_1'、'sinc'、 'shar1_1'、'shar_o'、'amb_o'、'intel1_1'、'attr1_1'、'fun_o']、 dtype='

我希望它们是字符串,如何转换它们?

【问题讨论】:

  • 你想提取字符串列表吗? .tolist() 会这样做。这些已经是 UTF-8 中的字符串
  • dtype='<U8' 是字符串数据类型

标签: python pandas numpy dtype


【解决方案1】:

您已经将其转换为字符串数据类型,即默认的 unicode 字符串数据类型:

>>> arr
array(['shar', 'dec', 'intel', 'like', 'amb', 'met', 'pid', 'prob_o',
       'pf_o_sin', 'pf_o_att', 'pf_o_sha', 'pf_o_fun', 'age_o',
       'pf_o_amb', 'pf_o_int', 'attr_o', 'attr', 'attr2_1', 'sinc',
       'shar1_1', 'shar_o', 'amb_o', 'intel1_1', 'attr1_1', 'fun_o'],
      dtype='<U8')

如果您想要字节串,请具体说明:

>>> arr.astype(np.dtype('S'))
array([b'shar', b'dec', b'intel', b'like', b'amb', b'met', b'pid',
       b'prob_o', b'pf_o_sin', b'pf_o_att', b'pf_o_sha', b'pf_o_fun',
       b'age_o', b'pf_o_amb', b'pf_o_int', b'attr_o', b'attr', b'attr2_1',
       b'sinc', b'shar1_1', b'shar_o', b'amb_o', b'intel1_1', b'attr1_1',
       b'fun_o'], dtype='|S8')

注意,出于内存目的,字节串可能更可取:

>>> arr.nbytes
800
>>> arr.astype(np.dtype('S')).nbytes
200

然而

如果您的目的是进行绘图,那么使用 object 几乎可以肯定。请注意,在 1.00 版之前,pandas 不使用任何特定于字符串的类型,object 字符串类型。

如果您正在使用 pandas,您可能需要:

>>> import pandas as pd
>>> pd.__version__
'1.1.1'
>>> s = pd.Series(['abc','def', 'ghi'])
>>> s
0    abc
1    def
2    ghi
dtype: object
>>> s.astype(pd.StringDtype())
0    abc
1    def
2    ghi
dtype: string

【讨论】:

  • 是的,我想在图中绘制为 yticks,就像这样 `plt.yticks(y_p,newMaxName)`,以 arr.astype(np.dtype("S)) 的方式工作,但是它可以水平工作,但它应该是垂直的,因为我把它们放在图表中,你对 pd.Series 说的最后一部分,这个字符串是熊猫的列
  • @Razbolt 它对数据框中的列的工作方式相同。您的其他问题似乎与此完全无关。同样,几乎可以肯定,您一开始不必进行任何转换。
猜你喜欢
  • 2016-12-30
  • 2019-12-13
  • 2014-04-03
  • 1970-01-01
  • 2021-10-20
  • 2015-08-29
  • 2020-04-23
  • 2018-02-12
  • 2020-11-13
相关资源
最近更新 更多