‘query’メソッドの基本的な使い方
Pandasのquery
メソッドは、データフレーム内のデータを効率的にフィルタリングするための強力なツールです。このメソッドを使用すると、文字列形式のクエリを指定してデータを選択できます。
まず、適切なデータフレームを作成しましょう。
import pandas as pd
# データフレームの作成
df = pd.DataFrame({
'A': range(1, 6),
'B': range(10, 60, 10),
'C': ['one', 'one', 'two', 'three', 'four']
})
上記のデータフレームでは、列Aには1から5までの数値、列Bには10から50までの数値(10の倍数)、列Cにはいくつかの文字列が含まれています。
次に、query
メソッドを使用してデータをフィルタリングします。例えば、列Aの値が3より大きいすべての行を選択するには、次のようにします。
df.query('A > 3')
このコードは、列Aの値が3より大きいすべての行を含む新しいデータフレームを返します。
query
メソッドは、複数の条件を組み合わせることも可能です。例えば、列Aの値が2より大きく、かつ列Cの値が’two’である行を選択するには、次のようにします。
df.query('A > 2 and C == "two"')
このように、query
メソッドを使用すると、複雑な条件を指定してデータを効率的にフィルタリングできます。これは、データ分析作業を大幅に簡素化し、コードの可読性を向上させます。
‘in’オペレータを用いたデータフィルタリング
Pandasのquery
メソッドは、’in’オペレータと組み合わせて使用することで、特定の値のリストに含まれるデータを選択することができます。これは、特定のカテゴリーに属するデータを選択する際に非常に便利です。
例えば、上記で作成したデータフレームから、列Cの値が’one’または’two’である行を選択するには、次のようにします。
df.query('C in ["one", "two"]')
このコードは、列Cの値が’one’または’two’であるすべての行を含む新しいデータフレームを返します。
また、’in’オペレータは否定も可能で、特定の値を含まないデータを選択することもできます。これは、’not in’オペレータを使用して行います。例えば、列Cの値が’three’または’four’でない行を選択するには、次のようにします。
df.query('C not in ["three", "four"]')
このコードは、列Cの値が’three’または’four’でないすべての行を含む新しいデータフレームを返します。
このように、’in’オペレータを使用すると、特定の値のリストに基づいてデータを効率的にフィルタリングできます。これは、特定のカテゴリーに属するデータを選択する際に非常に便利です。
複数条件を組み合わせたデータフィルタリング
Pandasのquery
メソッドは、複数の条件を組み合わせてデータをフィルタリングすることも可能です。これは、より複雑なデータ選択のシナリオに対応するために非常に便利です。
例えば、上記で作成したデータフレームから、列Aの値が2より大きく、かつ列Cの値が’one’または’two’である行を選択するには、次のようにします。
df.query('A > 2 and C in ["one", "two"]')
このコードは、列Aの値が2より大きく、かつ列Cの値が’one’または’two’であるすべての行を含む新しいデータフレームを返します。
また、複数の条件を組み合わせる際には、括弧を使用して条件の優先順位を明確にすることができます。例えば、列Aの値が2より大きく、かつ列Bの値が30以下、または列Cの値が’three’である行を選択するには、次のようにします。
df.query('(A > 2 and B <= 30) or C == "three"')
このコードは、列Aの値が2より大きく、かつ列Bの値が30以下、または列Cの値が’three’であるすべての行を含む新しいデータフレームを返します。
このように、query
メソッドを使用すると、複数の条件を組み合わせてデータを効率的にフィルタリングできます。これは、データ分析作業を大幅に簡素化し、コードの可読性を向上させます。
実践的な例とその解説
それでは、実際のデータセットを使用して、これまでに学んだquery
メソッドと’in’オペレータの使用方法を確認しましょう。
以下に示すのは、ある企業の従業員データを含むデータフレームです。
import pandas as pd
# データフレームの作成
df = pd.DataFrame({
'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
'Age': [25, 32, 35, 19, 45],
'Department': ['HR', 'Engineering', 'Engineering', 'HR', 'Management']
})
このデータフレームでは、列’Name’には従業員の名前、列’Age’には従業員の年齢、列’Department’には従業員が所属する部署の名前が含まれています。
次に、エンジニアリング部門に所属し、かつ年齢が30歳以上の従業員を選択するには、次のようにします。
df.query('Department == "Engineering" and Age >= 30')
このコードは、エンジニアリング部門に所属し、かつ年齢が30歳以上のすべての行を含む新しいデータフレームを返します。
また、HRまたはマネジメント部門に所属する従業員を選択するには、次のようにします。
df.query('Department in ["HR", "Management"]')
このコードは、HRまたはマネジメント部門に所属するすべての行を含む新しいデータフレームを返します。
このように、query
メソッドと’in’オペレータを使用すると、複雑な条件を指定してデータを効率的にフィルタリングできます。これは、データ分析作業を大幅に簡素化し、コードの可読性を向上させます。また、これらのテクニックは、実際のデータ分析の現場で頻繁に使用されます。この記事が、あなたのデータ分析スキルの向上に役立つことを願っています。