Введение

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. Выбор решения зависит от конкретных требований проекта.