我偶然发现了这段代码:
np.array([1,2,None]).astype(float)
哪个产生:
array([ 1., 2., nan])
我想看看这段代码如何将None转换为nan。所以我在Numpy的GitHub存储库中搜索了astype函数定义。你能帮我找到它显示用于将None转换为nan的代码的部分吗?我没有足够的python知识来理解像Numpy这样的库是如何做的。看完他们的代码后,我觉得我对python知之甚少。
def astype(self, typecode):
""
return self._rc(self.array.astype(typecode))
我不知道Numpy如何使用这个功能。我在整个存储库中找不到任何其他类型的astype函数定义。
跟踪已编译的numpy代码的操作非常困难。即使你可以找到astype
方法,你可能需要挖几个层来看你想要的。 top方法可能侧重于解释参数,而转换本身可能在完全不同的代码段中进行。
请注意,您的数组是object
dtype,正是因为None
对象。其他元素是整数,
In [48]: np.array([1,2,None])
Out[48]: array([1, 2, None], dtype=object)
如果我告诉它制作一个int
dtype数组,它会引发一个错误:
In [49]: np.array([1,2,None],int)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-49-c65114b3ba97> in <module>()
----> 1 np.array([1,2,None],int)
TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'
这与我用int(None)
得到的错误相同。
指定float
dtype,我像你一样得到nan
。实际上,这个np.array
调用与你的astype
方法相同。 (看看我的意思是很难确定'转换'的位置?)
In [50]: np.array([1,2,None],float)
Out[50]: array([ 1., 2., nan])
现在float(None)
引发了类似的错误,因此numpy
上的None
处理与Python不同。
numpy
还将字符串'nan'转换为float nan
:
In [56]: np.array([1,2,'nan'],float)
Out[56]: array([ 1., 2., nan])
将None
转换为浮动nan
并不奇怪。毕竟,它代表not a number
。但是很难在numpy
代码中找到确切的位置(或位置)。