Конвертируйте Pandas DataFrame в перо в памяти

Используя инструменты IO в пандах, можно преобразовать DataFrame в перовой буфер в памяти:

import pandas as pd  
from io import BytesIO 

df = pd.DataFrame({'a': [1,2], 'b': [3.0,4.0]})  

buf = BytesIO()

df.to_feather(buf)

Тем не менее, используя тот же буфер для преобразования обратно в DataFrame

pd.read_feather(buf)

Приводит к ошибке:

ArrowInvalid: не перья

Как преобразовать DataFrame в представление пера в памяти и, соответственно, обратно в DataFrame?

Заранее благодарю за внимание и ответ.

0 ответов

С pandas==0.25.2 это можно сделать следующим образом:

import pandas
import io
df = pandas.DataFrame(data={'a': [1, 2], 'b': [3.0, 4.0]})
buf = io.BytesIO()
df.to_feather(buf)
output = pandas.read_feather(buf)

Затем звонок в output.head(2) возвращает:

    a    b
 0  1  3.0
 1  2  4.0

Если у тебя есть DataFrame с несколькими индексами вы можете увидеть ошибку, например

ValueError: перо не поддерживает сериализацию индекса; вы можете.reset_index(), чтобы превратить индекс в столбец (ы)

В этом случае вам нужно позвонить .reset_index() перед to_feather, и позвонить .set_index([...]) после read_feather


Последнее, что я хотел бы добавить, это то, что если вы что-то делаете с BytesIO, вам нужно вернуться к 0 после записи байтов пера. Например:

buffer = io.BytesIO()
df.reset_index(drop=False).to_feather(buffer)
buffer.seek(0)
s3_client.put_object(Body=buffer, Bucket='bucket', Key='file')
Другие вопросы по тегам