#python #pandas #parquet #pyarrow
Вопрос:
Благодаря предложению @TDrabas я немного больше изучил свою проблему. Обновил свой вопрос, как показано ниже:
У меня есть фрейм данных, как показано ниже:
import pandas as pd import pyarrow as pa import pyarrow.parquet as pq df = pd.DataFrame([[1]]) df.index = pd.MultiIndex.from_tuples([('a','b','c')], names=["column1", "column2", "column3"]) df.columns = pd.MultiIndex.from_tuples([('a','b','c')], names=["column1", "column2", "column3"]) # narrow down to empty df df = df.loc[[], []] table = pa.Table.from_pandas(df) pq.write_table(table, 'my_table.parquet') # the following breaks pd.read_parquet('my_table.parquet') # the following works fine table=pq.read_table('my_table.parquet') table # pyarrow.Table # column1: null # column2: null # column3: null # metadata table.shape # (0, 3)
pd.read_parquet
выдает ошибку
File "lib/python3.6/site-packages/pyarrow/pandas_compat.py", line 1071, in lt;listcompgt; for level, col_index in zip_longest( AttributeError: 'dict' object has no attribute 'dtype'
Я нашел решение, чтобы справиться с этим, но есть ли более элегантный способ, чем этот?
df = df.loc[[]] # instead of df.loc[[], []]
Комментарии:
1. можете ли вы получить имена столбцов из таблицы? тогда, возможно, pd.DataFrame(столбцы=[yourcolumns]). Должен просто дать вам пустой фрейм данных.
2. Каков ваш результат
print(pd.__version__)
? Я не могу воспроизвести ошибку3. Являются
'my_file.parquet'
ли и'my_table.parquet'
те же файлы? Кроме того, какую версию pyarrow и панд вы используете?4. @TDrabas извините, да, это один и тот же файл. это была опечатка. Я только что обновил свой вопрос
5. Я только что проверил это, и у меня не было никаких проблем. Не могли бы вы поделиться информацией, которую я просил ранее (Python 3.6 кажется немного устаревшим), и как был создан файл?