Сериализация фрейма данных 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, например.