2017-10-30 3 views
0

計算を行うためにpandas/daskを使用しています。ディスク上のパーケットファイルにデータを格納しています。問題は、「時間」という列と時間というインデックスがあることです。私は両方を保ちたい。私は、データを保存し、後でそれをロードすると、私は次のエラーを取得:インデックスが冗長な列を持つパーケットファイルをロードするときのpyarrowの問題

import pyarrow as pa 
import pyarrow.parquet as pq 
%matplotlib inline 
dfx.to_dict() 

Out[115]: 
{'close': {Timestamp('2017-06-30 01:31:00'): 154.99958999999998, 
    Timestamp('2017-06-30 01:32:00'): 154.99958999999998, 
    Timestamp('2017-06-30 01:33:00'): 154.01109, 
    Timestamp('2017-06-30 01:34:00'): 154.01109, 
    Timestamp('2017-06-30 01:35:00'): 152.60051000000001}, 
'time': {Timestamp('2017-06-30 01:31:00'): Timestamp('2017-06-30 01:31:00'), 
    Timestamp('2017-06-30 01:32:00'): Timestamp('2017-06-30 01:32:00'), 
    Timestamp('2017-06-30 01:33:00'): Timestamp('2017-06-30 01:33:00'), 
    Timestamp('2017-06-30 01:34:00'): Timestamp('2017-06-30 01:34:00'), 
    Timestamp('2017-06-30 01:35:00'): Timestamp('2017-06-30 01:35:00')}} 

# set index column 
dfx.set_index('time', drop=False, inplace=True) 

dfx.head() 
Out[117]: 
            time  close 
time            
2017-06-30 01:31:00 2017-06-30 01:31:00 154.99959 
2017-06-30 01:32:00 2017-06-30 01:32:00 154.99959 
2017-06-30 01:33:00 2017-06-30 01:33:00 154.01109 
2017-06-30 01:34:00 2017-06-30 01:34:00 154.01109 
2017-06-30 01:35:00 2017-06-30 01:35:00 152.60051 

# store to parquet file format 
tdfx = pa.Table.from_pandas(dfx) 
pq.write_table(tdfx, 'data.parquet') 


# recovering 
dfx = pq.read_table('data.parquet').to_pandas() 
--------------------------------------------------------------------------- 
IndexError        Traceback (most recent call last) 
<ipython-input-119-5e9d7cd2ea0d> in <module>() 
     1 # recovering 
----> 2 dfx = pq.read_table('data.parquet').to_pandas() 

pyarrow/table.pxi in pyarrow.lib.Table.to_pandas (/arrow/python/build/temp.linux-x86_64-3.6/lib.cxx:37990)() 

/home/ghildebrand/anaconda3/envs/p36/lib/python3.6/site-packages/pyarrow/pandas_compat.py in table_to_blockmanager(options, table, memory_pool, nthreads) 
    296   i = schema.get_field_index(name) 
    297   if i != -1: 
--> 298    col = table.column(i) 
    299    index_name = (None if is_unnamed_index_level(name) 
    300       else name) 

pyarrow/table.pxi in pyarrow.lib.Table.column (/arrow/python/build/temp.linux-x86_64-3.6/lib.cxx:38622)() 

IndexError: Table column index 2 is out of range 

これはpyarrowのバグですか、これは寄木細工では不可能であるか、私は他の何か間違ったことをやっています?

更新:冗長列「時間」を削除し、インデックス解決のみを保持する。だから私は問題は、どこかに列の識別子の一意なセットが作成されているようなことだと思います。

+1

私は、列名の衝突に問題があるはずだと思います。 2つの列に対して同じデータを2倍にするのはちょっとばかばかしいようですが、なぜそれが必要ですか?実験するだけで同じことをやろうとしますが、非インデックス時間の列は削除してください。 –

+0

非インデックス時間列を削除することで問題が解決しました。行為で列の名前を変更して問題を解決し、より洗練された – PlagTag

+1

これは矢印マスター(https://github.com/apache/arrow/pull/1271)で修正されており、次のリリースで使用できるようになります0.8.0。 –

答えて

関連する問題