Numpy重复将`nan`转换为`str`
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Numpy重复将`nan`转换为`str`相关的知识,希望对你有一定的参考价值。
这种笨拙的行为似乎有点奇怪。
>>> type(np.array([1, np.nan]).repeat(2)[2])
<class 'numpy.float64'>
但是当我把第一个参数变成一个字符串时
>>> type(np.array(["a", np.nan]).repeat(2)[2])
<class 'numpy.str_'>
我如何解决它?
答案
也许这种查看数组的方式会使差异更加清晰:
在第一种情况下,np.nan
是一个浮点数,因此所有元素都是浮点数:
In [310]: np.array([1, np.nan]).repeat(2)
Out[310]: array([ 1., 1., nan, nan])
In [311]: _.dtype
Out[311]: dtype('float64')
在第二个,有一个字符串,不能成为一个浮点数,所以整个数组的dtype是字符串 - 包括np.nan
现在是'nan':
In [312]: np.array(["a", np.nan]).repeat(2)
Out[312]: array(['a', 'a', 'nan', 'nan'], dtype='<U3')
In [313]: _.dtype
Out[313]: dtype('<U3')
repeat
与此无关。这是np.array
如何从列表中构建一个数组,选择最好的常见dtype
。
In [321]: np.array(["a", np.nan],dtype=float)
---------------------------------------------------------------------------
ValueError: could not convert string to float: 'a'
另一答案
dtype:数据类型,可选
数组所需的数据类型。如果没有给出,那么类型将被确定为保持序列中的对象所需的最小类型。此参数只能用于“upcast”数组。对于向下转换,请使用.astype(t)方法。
在你的第一个例子中,1
和numpy.nan
可以被投射到numpy.float64
;在第二个str
(即str(numpy.nan) = 'nan'
最终在你的阵列中)。
以上是关于Numpy重复将`nan`转换为`str`的主要内容,如果未能解决你的问题,请参考以下文章
Python\Numpy:将数组与 NAN 进行比较 [重复]