Сериализация фрейма данных pandas состоит из полей Nan перед отправкой в качестве ответа

У меня есть датафрейм, в котором есть Nan поля. Я хочу отправить этот датафрейм в качестве ответа. Поскольку в нем есть Nan полей, я получаю эту ошибку,

ValueError: Out of range float values are not JSON compliant

Я не хочу отбрасывать поля или заполнять их символом или т.д., и структура ответа по умолчанию идеально подходит для моего приложения.

Вот мой views.py

...
forecast = forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']]
    forecast['actual_value'] = df['y']    # <- Nan fields are added here
    forecast.rename(
        columns={
            'ds': 'date',
            'yhat': 'predictions',
            'yhat_lower': 'lower_bound',
            'yhat_upper': 'higher_bound'
        }, inplace=True
    )

    

    context = {
        'detail': forecast
    }

    return Response(context)

Dataframe,

                         date  predictions  lower_bound  higher_bound  actual_value
0  2022-07-23 06:31:41.362011     3.832143    -3.256209     10.358063           1.0
1  2022-07-23 06:31:50.437211     4.169004    -2.903518     10.566005           7.0
2  2022-07-28 14:20:05.000000    12.085815     5.267806     18.270929          20.0
...
16 2022-08-09 15:07:23.000000   105.655997    99.017424    112.419991           NaN
17 2022-08-10 15:07:23.000000   115.347283   108.526287    122.152684           NaN

Надеемся найти способ отправки dataframe в качестве ответа.

Вы можете попробовать использовать методы fillna и replace, чтобы избавиться от этих NaN-значений.
Добавление чего-то вроде этого должно сработать, поскольку значения None совместимы с JSON:

forecast = forecast.fillna(np.nan).replace([np.nan], [None])

Одного использования replace может быть достаточно, но использование fillna предотвращает ошибки, если у вас также есть значения NaT, например.

Вернуться на верх