2025, Nov 30 15:01

Сохранение Pandas Series в Feather через DataFrame

Разбираем, почему Pandas Series нельзя напрямую сохранить в Feather, и показываем решение: обернуть в DataFrame, дать имя столбцу и сохранить через to_feather.

Сохранение объекта Pandas Series напрямую в Feather часто удивляет: попытка вызвать на Series знакомый метод из DataFrame приводит к исключению. Если вы используете Feather для хранения табличных данных, для одностолбцовых структур понадобится небольшая корректировка.

Постановка задачи

Попытка сериализовать Series в формате Feather вот так приводит к ошибке:

import pandas as pds
single_col = pds.Series([1, 2, 3])
single_col.to_feather('col.feather')

Результат:

AttributeError: 'Series' object has no attribute 'to_feather'

Почему так происходит

Feather предназначен для табличных данных, которые естественно отображаются в DataFrame. Отдельный Series не хранит имя столбца и индекс в той же структурированной форме, поэтому у него нет прямого метода записи в Feather. Обернув Series в DataFrame, вы явно фиксируете метаданные и сохраняете совместимость с форматом.

Решение

Наилучший подход — преобразовать Series в DataFrame с одним столбцом, записать его на диск и при необходимости прочитать обратно и извлечь столбец. Так сохраняются форма данных, идентичность столбца и предсказуемое поведение при сохранении и последующей загрузке.

import pandas as pds
metric_col = pds.Series([10, 20, 30, 40], name='metric')
table_box = metric_col.to_frame()
table_box.to_feather('metric.feather')
print("Series saved to 'metric.feather'.")
reloaded_box = pds.read_feather('metric.feather')
restored_metric = reloaded_box['metric']
print("\nLoaded Series:")
print(restored_metric)

Почему это важно

Этот подход сохраняет имя столбца и обеспечивает чистую совместимость при сохранении и повторной загрузке. Он соответствует тому, как Feather задуман для представления данных, исключает неоднозначность с безымянными столбцами и делает шаг обратного чтения однозначным: вы точно знаете, какой столбец извлекаете.

Выводы

Если нужно сохранить Pandas Series в формате Feather, сначала оберните его в DataFrame. Дайте столбцу понятное имя, запишите через I/O DataFrame и затем восстановите Series из загруженного DataFrame. Этот небольшой шаг делает хранение согласованным, а конвейеры — предсказуемыми.