Pandasの列を複数条件で抽出: query、inなどのメソッドも解説

  • 2023年8月15日
  • 2023年8月16日
  • Python
  • 9059回
  • 0件

pandasのDataFrameには、特定の条件を満たす行を抽出するための多くの方法があります。この記事では、その中でも特によく使われる方法をいくつか紹介します。

基本的な条件抽出

# A列の値が5である行を抽出
df[df['A'] == 5]

複数の条件を組み合わせて抽出

&(AND)、|(OR)、~(NOT)を使用して、複数の条件を組み合わせることができます。

# A列の値が5かつB列の値が3の行を抽出
df[(df['A'] == 5) & (df['B'] == 3)]

queryメソッドを使用する方法

queryメソッドを使用すると、文字列として条件を指定することができます。これにより、複雑な条件の指定が簡単になります。

# A列の値が5かつB列の値が3の行を抽出
df.query('A == 5 & B == 3')

isinメソッドを使用する方法

isinメソッドは、指定したリストの中に値が存在するかどうかを判定するためのメソッドです。

# A列の値が1, 3, 5のいずれかである行を抽出
df[df['A'].isin([1, 3, 5])]

特定の範囲内の値を持つ行を抽出

betweenメソッドを使用すると、指定した範囲内の値を持つ行を抽出することができます。

# A列の値が10から20の間である行を抽出
df[df['A'].between(10, 20)]

特定の文字列を含む行を抽出

str.containsメソッドを使用すると、特定の文字列を含む行を抽出することができます。またstr.startswithメソッドを使用すると、特定の文字列で始まる行を抽出することができますが、「a~k」で始まるなど範囲指定を行う場合は、str.containsメソッドを使用した上で正規表現「^(ハット)」を用います。

# A列の値に"apple"という文字列を含む行を抽出
df[df['A'].str.contains("apple")]

# A列の値が"apple"という文字列で始まる行を抽出
df[df['A'].str.startswith("apple")]

# A列の値が"a-k"のいずれかの文字列で始まる行を抽出 
df[df['A'].str.contains("^[a-k]")]
特定の文字列で終わるという場合はstr.endswithメソッドを用いるか、正規表現の場合は$を用います。
さらにa~kで始まりx~zで終わるという場合には”^[a-k].*[x-z]$”といったように、間に.*(任意の文字列)を挟みます。
 

ある列の値を「含まない」条件を満たす行の抽出方法

~(チルダ)を使用して条件を否定し、特定の値を「含まない」条件を満たす行を抽出します。

# B列の値が '4' でない行を抽出
result = df[df['B'] != 4]

# B列の値が '4' または '2' でない行を抽出
result = df[~df['B'].isin([4, 2])]

以上、pandasで特定の条件を満たす行を抽出する基本的な方法でした。これらの方法を組み合わせることで、さまざまな条件でのデータの抽出が可能になります。ぜひご参考にしてください。

最新情報をチェックしよう!