data_columnsを使用する場合のHDFでのマルチインデックステーブルのクエリに関する問題

MMCM_

pandas HDFストアのマルチインデックステーブルにクエリを実行しようとしましたが、インデックスとdata_columnsに対して同時にクエリを使用すると失敗します。これは、の場合にのみ発生しdata_columns=Trueます。これが予想されるかどうか、またはdata_columnsを明示的に指定したくない場合に回避する方法はありますか?

次の例を参照してください。インデックスが有効な参照として認識されていないようです。

import pandas as pd
import numpy as np

file_path = 'D:\\test_store.h5'
np.random.seed(1234)
pd.set_option('display.max_rows',4)
# simulate some data
index = pd.MultiIndex.from_product([np.arange(10000,10200),
                                    pd.date_range('19800101',periods=500)],
                                   names=['id','date'])
df = pd.DataFrame(dict(id2=np.random.randint(0, 1000, size=len(index)),
                       w=np.random.randn(len(index))),
                  index=index).reset_index().set_index(['id', 'date'])

# store the data
store =  pd.HDFStore(file_path,mode='a',complib='blosc', complevel=9)
store.append('df_dc_None', df, data_columns=None)
store.append('df_dc_explicit', df, data_columns=['id2', 'w'])
store.append('df_dc_True', df, data_columns=True)
store.close()

# query the data
start = '19810201'
print(pd.read_hdf(file_path,'df_dc_None', where='date>start & id=10000'))
print(pd.read_hdf(file_path,'df_dc_True', where='id2>500'))
print(pd.read_hdf(file_path,'df_dc_explicit', where='date>start & id2>500'))
try:
    print(pd.read_hdf(file_path,'df_dc_True', where='date>start & id2>500'))
except ValueError as err:
    print(err)
MaxU

確かに興味深い質問です!

私は(なぜ私たちが使用している場合、インデックス列がインデックス化していない以下の違いを説明することはできませんdata_columns=None(デフォルトの原因にdocstringするHDFStore.append方法)と使用したときに我々は彼らがインデックス化されていませんdata_columns=True)。

In [114]: store.get_storer('df_dc_None').table
Out[114]:
/df_dc_None/table (Table(100000,), shuffle, blosc(9)) ''
  description := {
  "index": Int64Col(shape=(), dflt=0, pos=0),
  "values_block_0": Int32Col(shape=(1,), dflt=0, pos=1),
  "values_block_1": Float64Col(shape=(1,), dflt=0.0, pos=2),
  "date": Int64Col(shape=(), dflt=0, pos=3),
  "id": Int64Col(shape=(), dflt=0, pos=4)}
  byteorder := 'little'
  chunkshape := (1820,)
  autoindex := True
  colindexes := {
    "date": Index(6, medium, shuffle, zlib(1)).is_csi=False,
    "id": Index(6, medium, shuffle, zlib(1)).is_csi=False,
    "index": Index(6, medium, shuffle, zlib(1)).is_csi=False}

In [115]: store.get_storer('df_dc_True').table
Out[115]:
/df_dc_True/table (Table(100000,), shuffle, blosc(9)) ''
  description := {
  "index": Int64Col(shape=(), dflt=0, pos=0),
  "values_block_0": Int64Col(shape=(1,), dflt=0, pos=1),
  "values_block_1": Int64Col(shape=(1,), dflt=0, pos=2),
  "id2": Int32Col(shape=(), dflt=0, pos=3),
  "w": Float64Col(shape=(), dflt=0.0, pos=4)}
  byteorder := 'little'
  chunkshape := (1820,)
  autoindex := True
  colindexes := {
    "w": Index(6, medium, shuffle, zlib(1)).is_csi=False,
    "index": Index(6, medium, shuffle, zlib(1)).is_csi=False,
    "id2": Index(6, medium, shuffle, zlib(1)).is_csi=False}

注:colindexes上記の出力で注意してください。

しかし、次の簡単なハックを使用して、これを「修正」できます。

In [116]: store.append('df_dc_all', df, data_columns=df.head(1).reset_index().columns)

In [118]: store.get_storer('df_dc_all').table
Out[118]:
/df_dc_all/table (Table(100000,), shuffle, blosc(9)) ''
  description := {
  "index": Int64Col(shape=(), dflt=0, pos=0),
  "id": Int64Col(shape=(), dflt=0, pos=1),
  "date": Int64Col(shape=(), dflt=0, pos=2),
  "id2": Int32Col(shape=(), dflt=0, pos=3),
  "w": Float64Col(shape=(), dflt=0.0, pos=4)}
  byteorder := 'little'
  chunkshape := (1820,)
  autoindex := True
  colindexes := {
    "w": Index(6, medium, shuffle, zlib(1)).is_csi=False,
    "date": Index(6, medium, shuffle, zlib(1)).is_csi=False,
    "id": Index(6, medium, shuffle, zlib(1)).is_csi=False,
    "index": Index(6, medium, shuffle, zlib(1)).is_csi=False,
    "id2": Index(6, medium, shuffle, zlib(1)).is_csi=False}

小切手:

In [119]: pd.read_hdf(file_path,'df_dc_all', where='date>start & id2>500')
Out[119]:
                  id2         w
id    date
10000 1981-02-02  935  0.245637
      1981-02-04  994  0.291287
...               ...       ...
10199 1981-05-11  680 -0.370745
      1981-05-12  812 -0.880742

[10121 rows x 2 columns]

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

MYSQL ORクエリの問題(インデックスを使用している場合でもテーブル全体をスキャンします)

分類Dev

2つのテーブルとの価格マッチングに関するPostgresクエリの問題

分類Dev

SQLServerテーブルのインデックス作成に関する問題

分類Dev

エンティティでEnumを使用する場合のクエリ作成に関する問題

分類Dev

ブール値のリストを使用してRでインデックスを作成する際の問題

分類Dev

Oracleのパフォーマンスに関する質問、結合での内部選択、一時的なWITHテーブルのインデックス

分類Dev

最高のクエリパフォーマンスを得るためにテーブルで使用するSQLインデックス

分類Dev

ExcelVBAのADOを使用したOracleデータベースからの巨大なテーブルのクエリに関するメモリの問題

分類Dev

要素で定義された高さ(vh)を使用する場合の、Boostrapグリッド、オーバーフロースクロール、およびレスポンシブレイアウトに関する問題

分類Dev

Elasticsearch:フィールドがマルチインデックスクエリに存在する場合、フィールドのクエリを条件付きでフィルタリングします

分類Dev

301WordPressマルチサイトインストールに関するリダイレクトの問題

分類Dev

インストール後の最初の起動でのテクスチャに関するLibGDXの問題

分類Dev

MATCH と SELECT を一緒に使用する場合のクエリ パフォーマンスの問題 OrientDB

分類Dev

マルチドライブUSBエンクロージャーに関するUbuntu12.04の問題

分類Dev

リレーショナルデータベーステーブルをelastic-searchで別のインデックスとして保存するのは良いですか?はいの場合、インデックスで関係を渡す方法

分類Dev

(実際のSQL削除クエリを使用して)データベースからデータを削除すると、テーブルデータのインデックスの再作成で大きな問題が発生しますか?

分類Dev

クエリでOracleSQLServerの2つのテーブルを結合するのに問題があります

分類Dev

マルチインデックスのシリーズでpandas.at関数を使用する方法

分類Dev

FKフィールドがNULLの場合に2つのテーブルを結合するためにインデックスを使用する

分類Dev

テーブル行のハイパーリンクに関する問題

分類Dev

値が別のテーブルに存在する場合のテーブルのインデックスリストのフィルタリング

分類Dev

BitbucketServerでブランチ権限を使用する場合のマージの競合を伴うプルリクエストの解決

分類Dev

AngularJSで使用する場合、TinyMCEリッチテキストエディターでブラウザーのスペルチェックを有効にするにはどうすればよいですか?

分類Dev

結合を使用してテーブル2および3からテーブル1にデータを追加するためのMySQlクエリの問題

分類Dev

ブリッジテーブルを使用する場合のHQLクエリ?

分類Dev

データに二重引用符( ")が含まれている場合に問題が発生するスプールを使用して、テーブルデータをcsvにエクスポートするOracleコマンドライン

分類Dev

Slackデスクトップのインストールに関する問題

分類Dev

DSx デスクトップのインストールに関する問題

分類Dev

テーブルロックと並列クエリに関するMSSQL Server2012の問題でHibernate

Related 関連記事

  1. 1

    MYSQL ORクエリの問題(インデックスを使用している場合でもテーブル全体をスキャンします)

  2. 2

    2つのテーブルとの価格マッチングに関するPostgresクエリの問題

  3. 3

    SQLServerテーブルのインデックス作成に関する問題

  4. 4

    エンティティでEnumを使用する場合のクエリ作成に関する問題

  5. 5

    ブール値のリストを使用してRでインデックスを作成する際の問題

  6. 6

    Oracleのパフォーマンスに関する質問、結合での内部選択、一時的なWITHテーブルのインデックス

  7. 7

    最高のクエリパフォーマンスを得るためにテーブルで使用するSQLインデックス

  8. 8

    ExcelVBAのADOを使用したOracleデータベースからの巨大なテーブルのクエリに関するメモリの問題

  9. 9

    要素で定義された高さ(vh)を使用する場合の、Boostrapグリッド、オーバーフロースクロール、およびレスポンシブレイアウトに関する問題

  10. 10

    Elasticsearch:フィールドがマルチインデックスクエリに存在する場合、フィールドのクエリを条件付きでフィルタリングします

  11. 11

    301WordPressマルチサイトインストールに関するリダイレクトの問題

  12. 12

    インストール後の最初の起動でのテクスチャに関するLibGDXの問題

  13. 13

    MATCH と SELECT を一緒に使用する場合のクエリ パフォーマンスの問題 OrientDB

  14. 14

    マルチドライブUSBエンクロージャーに関するUbuntu12.04の問題

  15. 15

    リレーショナルデータベーステーブルをelastic-searchで別のインデックスとして保存するのは良いですか?はいの場合、インデックスで関係を渡す方法

  16. 16

    (実際のSQL削除クエリを使用して)データベースからデータを削除すると、テーブルデータのインデックスの再作成で大きな問題が発生しますか?

  17. 17

    クエリでOracleSQLServerの2つのテーブルを結合するのに問題があります

  18. 18

    マルチインデックスのシリーズでpandas.at関数を使用する方法

  19. 19

    FKフィールドがNULLの場合に2つのテーブルを結合するためにインデックスを使用する

  20. 20

    テーブル行のハイパーリンクに関する問題

  21. 21

    値が別のテーブルに存在する場合のテーブルのインデックスリストのフィルタリング

  22. 22

    BitbucketServerでブランチ権限を使用する場合のマージの競合を伴うプルリクエストの解決

  23. 23

    AngularJSで使用する場合、TinyMCEリッチテキストエディターでブラウザーのスペルチェックを有効にするにはどうすればよいですか?

  24. 24

    結合を使用してテーブル2および3からテーブル1にデータを追加するためのMySQlクエリの問題

  25. 25

    ブリッジテーブルを使用する場合のHQLクエリ?

  26. 26

    データに二重引用符( ")が含まれている場合に問題が発生するスプールを使用して、テーブルデータをcsvにエクスポートするOracleコマンドライン

  27. 27

    Slackデスクトップのインストールに関する問題

  28. 28

    DSx デスクトップのインストールに関する問題

  29. 29

    テーブルロックと並列クエリに関するMSSQL Server2012の問題でHibernate

ホットタグ

アーカイブ