работа с большими целыми числами в Pandas
буду признателен если подскажете есть ли способ работы с очень большими целыми числами в Pandas.
например, тип данных int64 это числа в диапазоне от -9223372036854775808 по 9223372036854775807, и если результат вычислений - это число не из этого диапазона, то получаем не совсем то что ожидалось:
79**10
>>>
9468276082626847201
pd.Series([78,79])**10
>>>
0 8335775831236199424
1 -8978467991082704415
dtype: int64
Ответы (1 шт):
В вашем конкретном случае это решается заданием беззнакового типа 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