难以确定numpy int64

时间:2017-03-21 15:56:54

标签: python pandas numpy

问题

我无法识别numpy.int64个对象,以便将它们转换为基础python int以进行json序列化。 isinstance通常有效,但在下面的例子中没有,我很想知道为什么会这样。

>>> x
0
>>> type(x)
<class 'numpy.int64'>
>>> import numpy
>>> isinstance(x, numpy.int64)
False

上下文

上面的

x来自我的应用程序,由to_dict在pandas数据帧上生成。各种数据帧用于生成结果,因此我不能只使用pandas to_json

How to identify numpy types in python?获取提示,我实际上设法成功地检测到这些项目(有时根本不是numpy对象),使用以下内容:

>>> (isinstance(x, (pd.np.ndarray, pd.np.generic)) and 
>>> pd.np.issubdtype(x, pd.np.dtype('int64')))
True

但如果有人能解释为什么第一个选项不起作用我会非常感激,这样我就可以有足够的信心将其部署到我们的生产系统中。使用simplejson和使用JSONDecoder的自定义isinstance(obj, pd.np.int64)类已经使用了几个月,但它突然停止使用上面的示例。

pickle.dumps(x)提供b'\x80\x03cnumpy.core.multiarray\nscalar\nq\x00cnumpy\ndtype\nq\x01X\x02\x00\x00\x00i8q\x02K\x00K\x01\x87q\x03Rq\x04(K\x03X\x01\x00\x00\x00<q\x05NNNJ\xff\xff\xff\xffJ\xff\xff\xff\xffK\x00tq\x06bC\x08\x00\x00\x00\x00\x00\x00\x00\x00q\x07\x86q\x08Rq\t.'

有趣的是,腌制对象似乎解决了这个问题。

>>> isinstance(pickle.loads(pickle.dumps(x)), pd.np.int64)
True

0 个答案:

没有答案