Введение
FastAPI — это современная платформа для создания веб-API, которая обеспечивает высокую производительность и безопасность. Она активно используется в業界 для разработки RESTful API. Однако, при работе с данными из Pandas DataFrame, разработчики могут столкнуться с ошибкой "Out of range float values are not JSON compliant". В этой статье мы рассмотрим причины возникновения этой ошибки и способы ее решения.
Причины ошибки
Ошибка "Out of range float values are not JSON compliant" возникает, когда FastAPI пытается вернуть данные из Pandas DataFrame, содержащие NaN (Not a Number) значения. NaN — это специальное значение, которое используется в Pandas для представления отсутствующих или недействительных данных.По умолчанию, FastAPI использует библиотеку
jsonable_encoder для преобразования данных в JSON-совместимый формат. Однако, эта библиотека не поддерживает NaN значения, что приводит к ошибке.
Решение ошибки
Использование преобразователей данных
Одним из способов решения этой ошибки является использование преобразователей данных. FastAPI предоставляет встроенную поддержку преобразователей данных с помощью функции
jsonable_encoder. Мы можем переопределить функцию
jsonable_encoder для поддержки NaN значений.
from fastapi import FastAPIimport pandas as pdfrom fastapi.encoders import jsonable_encoderapp = FastAPI()def nan_encoder(obj): if isinstance(obj, float) and obj != obj: return None return jsonable_encoder(obj)@app.get("/data/")def read_data(): data = pd.DataFrame({ 'A': [1, 2, None], 'B': [4, 5, 6] }) return jsonable_encoder(data, custom_encoder=nan_encoder)Использование библиотеки `pandas.json`
Другим способом решения этой ошибки является использование библиотеки
pandas.json. Эта библиотека предоставляет функцию
to_json, которая позволяет преобразовывать Pandas DataFrame в JSON-совместимый формат.
from fastapi import FastAPIimport pandas as pdapp = FastAPI()@app.get("/data/")def read_data(): data = pd.DataFrame({ 'A': [1, 2, None], 'B': [4, 5, 6] }) return data.to_json(orient='records')Сравнение решений
- Использование преобразователей данных: гибкость, возможность настройки, но сложность реализации.
- Использование библиотеки
pandas.json: простота использования, высокая производительность, но ограниченная настройка.
Заключение
В этой статье мы рассмотрели два способа решения ошибки "Out of range float values are not JSON compliant" при работе с Pandas DataFrame в FastAPI. Выбор решения зависит от конкретных требований проекта.