Pandas dataframe sort_values不适用于非常大的整数

时间:2017-04-20 15:53:01

标签: python sorting pandas ubuntu dataframe

我有一个场景,其中我有最后一位表示非常大整数的位串。数据帧排序值似乎不适用于非常大的数字。

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上。

1 个答案:

答案 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']))