我有一张表格,其中一列从csv中以np.str的形式加载。但是dtype表示这很奇怪的U64(我想是意思,unsigned int 64 bit?),用astype转换不起作用。
stringIDs = extractedBatch.ID.astype(np.str)
键入后,dtype会显示“对象”
答案 0 :(得分:1)
In [313]: arr = np.array(['one','twenty'])
In [314]: arr
Out[314]: array(['one', 'twenty'], dtype='<U6')
In [315]: arr.astype(object)
Out[315]: array(['one', 'twenty'], dtype=object)
np.char
将字符串方法应用于字符串dtype数组的元素:
In [316]: np.char.add(arr, ' foo')
Out[316]: array(['one foo', 'twenty foo'], dtype='<U10')
未为numpy字符串dtypes定义 add
:
In [317]: np.add(arr, ' foo')
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-317-eff87c160b77> in <module>
----> 1 np.add(arr, ' foo')
TypeError: ufunc 'add' did not contain a loop with signature matching types dtype('<U6') dtype('<U6') dtype('<U6')
此np.add
的使用将'foo'字符串转换为数组,然后再尝试使用它。试图将“ U6”字符串添加到“ U6”字符串中。
np.add
应用于对象dtype数组时,将操作委派给元素的相应方法。由于add
是为Python字符串定义的,因此可以使用:
In [318]: np.add(arr.astype(object), ' foo')
Out[318]: array(['one foo', 'twenty foo'], dtype=object)
此模式适用于所有的numpy ufunc
。它们是为特定的dtypes
定义的。如果给定object
dtype,则它们将委托-根据元素的方法,它可能起作用也可能不起作用。
object
和np.char
这两种方法都等效于列表理解,并且速度大致相同:
In [324]: [i+' foo' for i in arr]
Out[324]: ['one foo', 'twenty foo']
===
字符串复制示例*
In [319]: arr*2
TypeError: ufunc 'multiply' did not contain a loop with signature matching types dtype('<U6') dtype('<U6') dtype('<U6')
In [320]: arr.astype(object)*2
Out[320]: array(['oneone', 'twentytwenty'], dtype=object)
In [322]: np.char.multiply(arr,2)
Out[322]: array(['oneone', 'twentytwenty'], dtype='<U12')
答案 1 :(得分:0)
Pandas不使用str dtype,而是使用对象(即使基础值为str):
In [11]: s = pd.Series(['a'], dtype='U64')
In [12]: type(s[0])
Out[12]: str