Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python插入长整数_Python_Numpy_Pandas - Fatal编程技术网

Python插入长整数

Python插入长整数,python,numpy,pandas,Python,Numpy,Pandas,我试图在数据帧中插入长整数 import numpy as np from pandas import DataFrame data_scores = [(6311132704823138710, 273), (2685045978526272070, 23), (8921811264899370420, 45), (17019687244989530680L, 270), (9930107427299601010L, 273)] dtype = [('uid', 'u8'), ('score

我试图在数据帧中插入长整数

import numpy as np
from pandas import DataFrame

data_scores = [(6311132704823138710, 273), (2685045978526272070, 23), (8921811264899370420, 45), (17019687244989530680L, 270), (9930107427299601010L, 273)]
dtype = [('uid', 'u8'), ('score', 'u8')]
data = np.zeros((len(data_scores),),dtype=dtype)
data[:] = data_scores
df_crawls = DataFrame(data)
print df_crawls.head()
但当我查看数据帧时,最后的长值现在为负值:

uid score 0 6311132704823138710 273 1 2685045978526272070 23 2 8921811264899370420 45 3 -1427056828720020936 270 4 -8516636646409950606 273 uid分数 0 6311132704823138710 273 1 2685045978526272070 23 2 8921811264899370420 45 3 -1427056828720020936 270 4 -8516636646409950606 273
UID是64位无符号整数,所以“u8”应该是正确的数据类型?有什么想法吗?

除了在64位计算机上试用或联系pandas开发人员(或自己解决问题……)之外,这不会告诉你该怎么做。但无论如何,这似乎是你的问题:

问题是,
DataFrame
至少在32位机器上不理解64位无符号整数

我更改了您的
数据\u分数的值,以便更好地跟踪发生的情况:

data_scores = [(2**31 + 1, 273), (2 ** 31 - 1, 23), (2 ** 32 + 1, 45), (2 ** 63 - 1, 270), (2 ** 63 + 1, 273)]
然后我试着:

In [92]: data.dtype
Out[92]: dtype([('uid', '<u8'), ('score', '<u8')])

In [93]: data
Out[93]: 
array([(2147483649L, 273L), (2147483647L, 23L), (4294967297L, 45L),
       (9223372036854775807L, 270L), (9223372036854775809L, 273L)], 
      dtype=[('uid', '<u8'), ('score', '<u8')])

In [94]: df = DataFrame(data, dtype='uint64')

In [95]: df.values
Out[95]: 
array([[2147483649,                  273],
       [2147483647,                   23],
       [4294967297,                   45],
       [9223372036854775807,                  270],
       [-9223372036854775807,                  273]], dtype=int64)
[92]中的
:data.dtype
Out[92]:dtype([('uid','是的--这是pandas目前的一个限制--我们确实计划在将来添加对无符号整数dtype的支持。错误消息会更好:

现在,您可以将列
dtype=object
作为解决方法

编辑2012-11-27

不过,在DataFrame更好地支持无符号数据类型之前,现在检测溢出将变成dtype=object

In [3]: df_crawls
Out[3]: 
                    uid  score
0   6311132704823138710    273
1   2685045978526272070     23
2   8921811264899370420     45
3  17019687244989530680    270
4   9930107427299601010    273

In [4]: df_crawls.dtypes
Out[4]: 
uid      object
score     int64

好像是溢出来了。试试“大一点”怎么样数据类型?使用u16:TypeError:data type not Understoody您的np数据看起来很好,错误表明pandas遗漏了
u
,并为您提供了有符号的long而不是无符号的long。我的最佳猜测是,当pandas可能使用c时,numpy可能保留数组中每个元素所需的位数,在这种情况下a例如,长期依赖于系统的体系结构(32位对64位)简言之,问题可能在于在32位计算机上运行您的代码。我个人认为这是pandas中的一个错误,应该报告。pandas至少应该在从numpy执行这种不安全的强制转换时发出警告,并且在使用不同类型的代码时出现错误,然后明确要求…我同意这样会更好,也是这样值得注意的是,它实际上为您的数据创建了一个新的副本,因此,如果数组很大,您将使用两倍的内存。。。