работа с большими целыми числами в Pandas

буду признателен если подскажете есть ли способ работы с очень большими целыми числами в Pandas.

например, тип данных int64 это числа в диапазоне от -9223372036854775808 по 9223372036854775807, и если результат вычислений - это число не из этого диапазона, то получаем не совсем то что ожидалось:

79**10  
>>>
9468276082626847201

pd.Series([78,79])**10
>>>
0    8335775831236199424
1   -8978467991082704415
dtype: int64

Ответы (1 шт):

Автор решения: CrazyElf

В вашем конкретном случае это решается заданием беззнакового типа uint64, а вот если и его не хватит, или у вас возможны и отрицательные числа, то будет сложнее, поскольку целых типов длины 128 в Pandas/Numpy уже нет.

pd.Series([78,79], dtype='uint64')**10

Вывод:

0    8335775831236199424
1    9468276082626847201
dtype: uint64

А если взять float128, то там другая проблема будет - в последних знаках будут уже цифры не те, если повышать степень. В общем, Pandas/Numpy под такое не очень заточены.

P.S. Можно и Decimal запихать в pandas.Series, но он будет лежать там как object и эффективность будет страдать. Но работать такое будет до бОльших степеней. А если точность у Decimal выставить побольше, то и ещё больших степеней можно достигнуть:

from decimal import Decimal

series = pd.Series(map(Decimal, [78,79]))
print(series**14)

Вывод:

0    308549209196654470906527744
1    368790120348678391253573281
dtype: object

P.P.S. Да собственно я торможу, никто не мешает и int запихать как object:

series = pd.Series([78,79], dtype='object')
print(series**25)

Вывод:

0    200615769179944123990033289551061546247879917568
1    275852727404510985186163978883510976421015681999
dtype: object
→ Ссылка