Skip to main content
DataStore は pandas と高い互換性がありますが、理解しておくべき重要な違いがいくつかあります。

概要表


1. 遅延実行と即時実行

pandas (即時実行)

操作は即座に実行されます。

DataStore (遅延実行)

結果が必要になるまで、操作は実行されません。

なぜ重要か

遅延実行には、次の利点があります。
  • クエリ最適化: 複数の操作が 1 つの SQL クエリにコンパイルされる
  • カラムプルーニング: 必要なカラムだけが読み込まれる
  • フィルタのプッシュダウン: フィルタがデータソース側で適用される
  • メモリ効率: 必要のないデータは読み込まない

2. 戻り値の型

pandas

DataStore

pandasの型への変換


3. 実行トリガー

DataStore は、実際の値が必要になった時点で実行されます。

遅延実行のままになる操作


4. 行の並び順

pandas

行の順序は常に維持されます。

DataStore

多くの操作では、行の順序は自動的に保持されます
DataStore は、pandas と同じ順序を保てるように、元の行位置を内部で自動的に追跡します (rowNumberInAllBlocks() を使用) 。

順序が保持される場合

  • ファイルソース (CSV、Parquet、JSON など)
  • pandas DataFrame ソース
  • フィルタ操作
  • カラムの選択
  • sort() または sort_values() を明示的に実行した後
  • 順序を定義する操作 (nlargest(), nsmallest(), head(), tail())

順序が変わることがある場合

  • groupby() による集計の後 (順序を一定にしたい場合は sort_values() を使用してください)
  • 特定の JOIN 種別で merge() / join() を行った後
  • パフォーマンスモード (config.use_performance_mode()) では、どの操作でも行の順序は保証されません。詳細は パフォーマンスモード を参照してください。

5. inplace パラメータなし

pandas

DataStore

inplace=True はサポートされていません。必ず結果を代入してください。

なぜ inplace はないのでしょうか?

DataStore は、以下を実現するためにイミュータブルな操作を採用しています。
  • クエリの構築 (遅延評価)
  • スレッドセーフ
  • デバッグのしやすさ
  • よりクリーンなコード

6. 索引のサポート

pandas

索引を完全にサポート:

DataStore

簡易的な索引サポート:

DataStore ではソースの違いが重要です

  • DataFrame ソース: pandas のインデックスを保持します
  • File ソース: シンプルな整数インデックスを使用します

7. 比較時の動作

pandas との比較

pandas は DataStore オブジェクトを認識できません:

equals() を使用する


8. 型推論

pandas

numpy/pandas のデータ型を使用します:

DataStore

ClickHouseの型を使用できます。

明示的なキャスト


9. メモリモデル

pandas

すべてのデータはメモリ上に保持されます。

DataStore

データは必要になるまでソース側に保持されます:

10. エラーメッセージ

エラーの発生元の違い

  • pandas errors: pandasライブラリに由来
  • DataStore errors: chDB または ClickHouse に由来

デバッグのヒント


移行チェックリスト

pandas から移行する場合:
  • import 文を変更する
  • inplace=True パラメータを削除する
  • pandas DataFrame が必要な箇所では、明示的に to_df() を追加する
  • 行の順序が重要な場合はソートを追加する
  • 比較テストには to_pandas() を使用する
  • 実際の使用を想定したデータサイズでテストする

クイックリファレンス

最終更新日 2026年7月23日