10 Best Pandas Queryの例とツール:包括的なガイド
Published on
Pandasは、データ操作や分析における強力なPythonライブラリです。その最も強力なツールの1つがquery()
関数です。この関数を使用すると、直感的で効率的な構文を使用して、DataFrame内のデータをフィルタリングおよび操作することができます。この記事では、query()
関数の詳細について掘り下げ、その全ポテンシャルを活用するための知識を提供します。
Pandasのquery()
関数は、ブール式を取り、それをDataFrameの各行にマッチングします。式がTrue
を返す行のみが返され、データがフィルタリングされます。この関数はパワフルでありながらも効率的ですが、データアナリストのツールキットにおいて不可欠なツールです。
Python Pandas Dataframeからコードを使用せずにデータ視覚化を簡単に作成したいですか?
PyGWalkerは、可視化を伴う探索的データ分析のためのPythonライブラリです。PyGWalker (opens in a new tab)は、パンダのデータフレーム(およびポーラズデータフレーム)をTableauスタイルのユーザーインターフェースに変えることで、Jupyterノートブックのデータ分析およびデータ視覚化のフローを簡素化できます。
パート1:Pandas Queryの理解
Pandas Queryとは何ですか?
Pandas queryは、Boolean式を使用してDataFrameのデータをフィルタリングするためのPandasライブラリ内の関数です。この関数は式をDataFrameの各行と照合し、その式がTrue
と評価される行のみを返します。この関数はデータ操作においてパワフルなツールであり、特に大規模なデータセットを扱う際に特に役立ちます。
Pandas Queryはどのように機能しますか?
Pandas queryはBoolean式を引数として受け取ります。この式はDataFrameの各行と照合されます。特定の行に対して式がTrue
と評価される場合、その行は出力DataFrameに含まれます。式がFalse
と評価される場合、その行は除外されます。
例えば、'A'という列を持つDataFrame df
があるとします。'A'が5より小さなすべての行をフィルタリングしたい場合、次のクエリを使用できます:
df.query('A < 5')
これにより、'A'が5未満の行のみを含む新しいDataFrameが返されます。
パート2:Pandas Query vs Loc
違いの理解
query()
とloc []
の両方は、Pandasでデータ選択に使用されますが、僅かに異なる方法で機能します。loc []
関数はラベルベースのデータ選択メソッドであり、ラベルに基づいてデータを選択するために使用されます。一方、query()
は、データ選択のために文字列式を使用するより柔軟なメソッドです。
例えば、'A'が5より小さい行を選択したい場合、loc []
は次のように使用します:
df.loc[df['A'] < 5]
そして、query()
を使用する場合は以下のようになります:
df.query('A < 5')
両メソッドは同じ結果を達成しますが、特に複雑な式を扱う場合には、query()
がより読みやすく簡潔な構文を提供します。
パート3:データフィルタリングのためのPandas Queryの使用
基本的なフィルタリング
query()
の主な使用目的は、特定の条件に基づいてデータをフィルタリングすることです。前の例で見たように、特定の条件が満たされる行を選択するためにquery()
を使用できます。条件は文字列として指定され、有効なPython式を含めることができます。
例えば、'A'、'B'、および'C'という列を持つDataFrame df
があり、'A'が'B'よりも小さく、'C'が10より大きい行のみを選択したい場合、次のクエリを使用できます:
df.query('A < B and C > 10')
これにより、'A'が'B'よりも小さく、'C'が10より大きい行のみを含む新しいDataFrameが返されます。
複数条件でのフィルタリング
Pandas queryでは、複数の条件に基づいてデータをフィルタリングすることもできます。and
やor
などの論理演算子を使用して複数の条件を組み合わせることができます。
例えば、'A'が5未満の行または'B'が10より大きい行のみを選択したい場合、次のクエリを使用できます:
df.query('A < 5 or B > 10')
これにより、'A'が5未満の行または'B'が10より大きい行のみを含む新しいDataFrameが返されます。
文字列によるフィルタリング
Pandas queryは、文字列の値に基づいてデータをフィルタリングするためにも使用できます。例えば、'Name'という列を持つDataFrameがあり、'Name'に文字列'John'を含む行のみを選択したい場合、次のクエリを使用できます:
df.query('Name.str.contains("John")')
これにより、'Name'に文字列'John'を含む行のみを含む新しいDataFrameが返されます。
パート4:Pandas Queryの高度な使用法
スペースを含む列名のDataFrameでのQueryの使用
DataFrameの列名にスペースが含まれる場合、バッククォートを使用してquery()
を使用することができます。例えば、'First Name'という名前の列がある場合、次のクエリを使用できます:
df.query('`First Name` == "John"')
これにより、'First Name'が'John'である行のみを含む新しいDataFrameが返されます。
行と列の選択にQueryを使用する
Pandas queryは、DataFrameから特定の行と列を選択するためにも使用できます。例えば、'C'が10よりも大きいすべての行の'A'および'B'列を選択したい場合、次のクエリを使用できます:
df.query('C > 10')[['A', 'B']]
このマークダウンファイルでは、以下の内容が返されます。'C'が10より大きい行のみ、'A'と'B'の列だけを含む新しいDataFrameが返されます。
パート5:Pandasクエリのパフォーマンスチューニング
Pandasのクエリは既にパフォーマンスが最適化されていますが、クエリをさらに高速化するためにできることがいくつかあります。クエリのパフォーマンスを改善する最も効果的な方法の1つは、ベクトル化された操作を使用することです。これらは、個々の要素ではなく、配列全体に適用される操作です。
例えば、列の各要素を反復処理するためにループを使用する代わりに、ベクトル化された操作を使用して一度に列全体に関数を適用することができます。これは特に大規模なデータセットの場合に、パフォーマンスを著しく向上させることができます。
クエリのパフォーマンスを改善するもう一つの方法は、eval()
関数をquery()
と組み合わせて使用することです。eval()
関数は、query()
よりも効率的に複雑な式を評価できますし、クエリのスピードアップに役立ちます。
例えば、次のような複雑なクエリがある場合:
df.query('A < B and C > D or E < F')
効率的に式を評価するために、eval()
を使用することができます:
df.query(df.eval('A < B and C > D or E < F'))
パート6:機械学習と生成AIのためのPandasクエリ
Pandasのクエリは、データ分析だけでなく、機械学習や生成AIにも役立ちます。query()
を使用することで、データを効率的にフィルタリングや操作することができ、データを機械学習アルゴリズムに適した形式に準備することができます。
例えば、query()
を使用してデータセットから特定の特徴量を選択したり、モデルのパフォーマンスに悪影響を与える可能性のある外れ値をフィルタリングしたりすることができます。また、既存の特徴量を基に新しい特徴量を作成するためにquery()
を使用することもできます。これにより、モデルの予測力を向上させることができます。
既存のデータに基づいて新しいデータを作成する生成AIにおいても、query()
は便利です。query()
を使用することで、データを簡単にフィルタリングや操作することができ、より多様で現実的な合成データを作成することができます。
よくある質問
スペースが含まれる列名を持つDataFrameでもquery()を使用できますか?
はい、DataFrameにスペースを含んだ列名がある場合でも、バッククォートを使用してquery()
を使用することができます。例えば、'First Name'という列名がある場合、以下のクエリを使用することができます:
df.query('`First Name` == "John"')
Pandasのqueryは、DataFrameのデータをフィルタリングするためにどのように使用されますか?
Pandasのqueryは、特定の条件に基づいてデータをフィルタリングするために使用されます。この関数は、ブール式を引数として受け取り、DataFrameの各行と一致します。式が特定の行でTrue
と評価される場合、その行は出力DataFrameに含まれます。
Pandasのqueryとlocの違いは何ですか?
query()
とloc[]
はどちらもPandasのデータ選択に使用されますが、若干異なる方法で機能します。loc[]
関数はラベルベースのデータ選択方法であり、ラベルに基づいてデータを選択します。一方、query()
はより柔軟なメソッドであり、データ選択に文字列式を使用します。