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. Этот небольшой шаг делает хранение согласованным, а конвейеры — предсказуемыми.