我有一个场景,其中我有最后一位表示非常大整数的位串。数据帧排序值似乎不适用于非常大的数字。
E.g
import pandas
collection = [{'val1': 1, 'val2': 21267647942462174285355641184253378561}, {'val1': 2, 'val2': 42535295884924348570711282368506757122}]
df = pandas.DataFrame(collection)
result_job_order = df.sort_values(by=["val1", "val2"],ascending=[False, False])
输出
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.4/dist-packages/pandas/core/frame.py", line 3139, in sort_values
na_position=na_position)
File "/usr/local/lib/python3.4/dist-packages/pandas/core/groupby.py", line 4128, in _lexsort_indexer
c = Categorical(key, ordered=True)
File "/usr/local/lib/python3.4/dist-packages/pandas/core/categorical.py", line 298, in __init__
categories = self._validate_categories(categories)
File "/usr/local/lib/python3.4/dist-packages/pandas/core/categorical.py", line 487, in _validate_categories
categories = Index(categories, dtype=dtype)
File "/usr/local/lib/python3.4/dist-packages/pandas/indexes/base.py", line 232, in __new__
return Int64Index(subarr.astype('i8'), copy=copy,
OverflowError: Python int too large to convert to C long
我该如何解决这个问题?
用于排序值的其他替代方法吗?
我在1000个元素数组的数据集上进行11级排序。 从整个转换点开始,我需要以极快的速度工作 二进制数而不是字符串组合是为了达到巨大的速度。
非常奇怪这个特殊问题发生在我的ubuntu服务器上,这是一台64位的c4.large机器,但不会发生在我的macbook上。
答案 0 :(得分:0)
苏格兰人在评论中提到,
使用float
为我工作的非常大的数字
collection = [{'val1': 1, 'val2': 21267647942462174285355641184253378561*1.0},
{'val1': 2, 'val2': 42535295884924348570711282368506757122*1.0}]
另外作为排序的替代方案
sorted(collection, key=lambda x: (-x['val1'], -x['val2']))