Конвертируйте 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')