簡體   English   中英

熊貓dataframe sort_values不適用於非常大的整數

[英]Pandas dataframe sort_values not working on very large integers

我有一個場景,在該場景中,我有最后一個字符串表示非常大的整數。 數據框排序值似乎不適用於很大的數字。

例如

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上卻沒有發生。

正如Scot在評論中提到的那樣,使用float很大對我有用

collection = [{'val1': 1, 'val2': 21267647942462174285355641184253378561*1.0}, 
              {'val1': 2, 'val2': 42535295884924348570711282368506757122*1.0}]

也可以作為排序的替代方法

sorted(collection, key=lambda x: (-x['val1'], -x['val2']))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM