У меня есть функция, которая отлично работает с отдельными значениями, но когда я использую ее с pandas series.apply(), она дает OverflowError.Ошибка OverFlow с Pandas series.apply
from __future__ import division
import pandas as pd
import numpy as np
birthdays = pd.DataFrame(np.empty([365,2]), columns = ['k','probability'], index = range(1,366))
birthdays['k'] = birthdays.index
Я делаю функцию:
def probability_of_shared_bday(k):
end_point = 366 - k
numerator = 1
for i in range(end_point, 366):
numerator = numerator*i
denominator = 365**k
probability_of_no_match = (1 - numerator/denominator)
return probability_of_no_match
, когда я пытаюсь это с отдельными целыми числами, то он работает отлично:
probability_of_shared_bday(1)
0,0
probability_of_shared_bday(100)
0,9999996927510721
Но когда я пытаюсь использовать эту функцию применить:
birthdays['probability'] = birthdays['k'].apply(probability_of_shared_bday, convert_dtype=False)
OverflowError: целое результат деления слишком велики для поплавка
Это происходит независимо от того, если convert_dtype
является истинным или ложным.
Проверка birthdays['k'].dtypes
я dtype('int64')
Что такое 'дни рождения ['k']. Max()'? –
дни рождения ['k']. Max() is 365 –
Это интригующая проблема, но, честно говоря, вы должны просто переписать свою функцию, чтобы разделить ее на 365, когда вы идете внутри цикла. – IanS