Почему Pandas Series rolling конвертирует int во float?

Рейтинг: 1Ответов: 1Опубликовано: 06.06.2023

Коллеги, столкнулся с непонятным поведением метода 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 результат не изменила)

Ответы

▲ 2Принят

Как написано в обсуждении 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.

Таков путь.