Почему Pandas Series rolling конвертирует int во float?
Коллеги, столкнулся с непонятным поведением метода pandas.series.rolling прошу пояснить. Для исследования возьмем вот такой искусственный код:
import pandas as pd
def rolling_print(x):
print(x)
return float('nan')
ser = pd.Series([1, 2, 3, 5, 6, 7, 8, 9])
print(ser)
ser.rolling(5).apply(rolling_print)
Поясню: берем pandas.series из int от 1 до 9, применяем к этой серии метод rolling с окном 5 (неважно какое значение окна, я пробовал и с int и с datetime), и затем с помощью apply вызываем функцию, для того, чтобы выводить данные из каждого окна. Так вот, при выводе становится видно, что данные превратились из int во float. То есть 1.0, 2.0... и т.д. Почему? (Замена возвращаемых данных с float('nan') на любую константу типа int результат не изменила)
Ответы (1 шт):
Как написано в обсуждении BUG: Pandas rolling window always converts to float #53214
The issue here is that our Cython code that handles rolling can only take in float64 inputs, so the input is cast beforehand to float64 here.
Проблема в том, что наш код на Cython, которые обрабатывает функционал rolling, может принимать только значения типа float64, поэтому входные данные заранее преобразовываются в формат float64.
Таков путь.