熊猫:什么是dtype = <u64,并且=“ =” how =“” do =“” i =“” convert =“” it =“” to =“”字符串?=“”

时间:2019-05-24 17:36:44

标签: pandas numpy types

=“”

我有一张表格,其中一列从csv中以np.str的形式加载。但是dtype表示这很奇怪的U64(我想是意思,unsigned int 64 bit?),用astype转换不起作用。

stringIDs = extractedBatch.ID.astype(np.str)

键入后,dtype会显示“对象”

2 个答案:

答案 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,则它们将委托-根据元素的方法,它可能起作用也可能不起作用。

objectnp.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