如何将多索引的熊猫数据帧保存到镶木地板中?

时间:2019-02-25 07:33:40

标签: pandas parquet

如何将最后显示的数据框保存到镶木地板中?
它是这样构造的:

df_test = pd.DataFrame(np.random.rand(6,4))
df_test.columns = pd.MultiIndex.from_arrays([('A', 'A', 'B', 'B'), 
      ('c1', 'c2', 'c3', 'c4')], names=['lev_0', 'lev_1'])
df_test.to_parquet("c:/users/some_folder/test.parquet")

该代码的最后一行返回:

  

ValueError:镶木地板必须具有字符串列名称

我是否假设我无法保存具有由(字符串的)多索引创建的列标题的数据框?谢谢。

-数据框如下所示:

lev_0         A                   B          
lev_1        c1        c2        c3        c4
0      0.713922  0.551404  0.289861  0.178739
1      0.693925  0.425073  0.660924  0.695474
2      0.280258  0.827231  0.282844  0.523069
3      0.424731  0.380963  0.462356  0.491140
4      0.786677  0.102935  0.382453  0.199056
5      0.783115  0.295409  0.236880  0.388399

2 个答案:

答案 0 :(得分:0)

pyarrow可以将pandas多索引写入到镶木地板文件中。

import pandas as pd
import numpy as np
import pyarrow.parquet as pq

df_test = pd.DataFrame(np.random.rand(6,4))
df_test.columns = pd.MultiIndex.from_arrays([('A', 'A', 'B', 'B'), 
      ('c1', 'c2', 'c3', 'c4')], names=['lev_0', 'lev_1'])
table = pa.Table.from_pandas(df_test)
pq.write_table(table, 'test.parquet')

df_test_read = pd.read_parquet('test.parquet')

答案 1 :(得分:0)

熊猫> = 1.2 [est]

对于熊猫1.2,此问题已修复,请参见GH34777

pd.__version__
# '1.1.0.dev0+3475.gd9845cf5d'

# Writing.
df_test

lev_0         A                   B          
lev_1        c1        c2        c3        c4
0      0.208907  0.875918  0.610843  0.155938
1      0.325854  0.271798  0.916347  0.368343
2      0.650087  0.238840  0.415166  0.218156
3      0.684763  0.075124  0.761239  0.567883
4      0.633933  0.362682  0.214050  0.955370
5      0.561144  0.017972  0.197339  0.251407

# Writes successfully
df_test.to_parquet('test.parquet')
# Reading.
pd.read_parquet('test.parquet')
 
lev_0         A                   B          
lev_1        c1        c2        c3        c4
0      0.208907  0.875918  0.610843  0.155938
1      0.325854  0.271798  0.916347  0.368343
2      0.650087  0.238840  0.415166  0.218156
3      0.684763  0.075124  0.761239  0.567883
4      0.633933  0.362682  0.214050  0.955370
5      0.561144  0.017972  0.197339  0.251407

注意:pandas 1.2还没有发布,但是如果您想测试的话,可以从头开始构建pandas。此外,要运行代码,您需要用于实木复合地板的后端引擎(即pyarrow)。