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]$”といったように、間に.*(任意の文字列)を挟みます。
さらに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で特定の条件を満たす行を抽出する基本的な方法でした。これらの方法を組み合わせることで、さまざまな条件でのデータの抽出が可能になります。ぜひご参考にしてください。