当前位置:  开发笔记 > 编程语言 > 正文

为什么pandas将unsigned int大于2**63-1转换为对象?

如何解决《为什么pandas将unsignedint大于2**63-1转换为对象?》经验,为你挑选了1个好方法。

当我将numpy数组转换为pandas数据帧时,如果整数大于2 ^ 63 - 1,pandas会将uint64类型更改为对象类型.

import pandas as pd
import numpy as np

x = np.array([('foo', 2 ** 63)], dtype = np.dtype([('string', np.str_, 3), ('unsigned', np.uint64)]))
y = np.array([('foo', 2 ** 63 - 1)], dtype = np.dtype([('string', np.str_, 3), ('unsigned', np.uint64)]))

print pd.DataFrame(x).dtypes.unsigned
dtype('O')
print pd.DataFrame(y).dtypes.unsigned
dtype('uint64')

这很烦人,因为我无法以表格格式将数据帧写入hdf文件:

pd.DataFrame(x).to_hdf('x.hdf', 'key', format = 'table')

输出继电器:

TypeError:无法序列化[unsigned]列,因为其数据内容为[integer] object dtype

有人可以解释类型转换吗?



1> ilyas patana..:

这是一个开放的bug,但你可以强制它回到uint64 使用状态 DataFrame.astype()

x = np.array([('foo', 2 ** 63)], dtype = np.dtype([('string', np.str_, 3), ('unsigned', np.uint64)]))

a = pd.DataFrame(x)
a['unsigned'] = a['unsigned'].astype(np.uint64)
>>>a.dtypes
string      object
unsigned    uint64
dtype: object

用于将数据类型转换为数值的其他方法引发错误或不起作用:

>>>pd.to_numeric(a['unsigned'], errors = coerce)
OverflowError: Python int too large to convert to C long

>>>a.convert_objects(convert_numeric = True).dtypes
string      object
unsigned    object
dtype: object

推荐阅读
谢谢巷议
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有