Python

pandasのDataFrameを複数条件でフィルタする方法

pandasのDataFrameを複数条件でフィルタする方法

pandasのDataFrameってどうやってフィルタするんだっけ?

Pythonで表形式のデータを扱うのに便利なpandas

表形式のデータであればRDBMSのように一部のデータだけ抽出したいこともあるだろう。

だがpandasはRDBMSではないのでSQLで条件指定するわけにはいかない

ではどうやって条件指定してフィルタすればいいのか。

そこで今回はpandasのDataFrameを複数条件でフィルタする方法について解説する。

この記事を書いている人


システムエンジニア、AIエンジニアと、IT業界で10年以上働いている中堅。PythonとSQLが得意。

記事を読むメリット

pandasのDataFrameを複数条件でフィルタする方法がわかる


pandasのDataFrameをフィルタする方法

まずpandasでDataFrameをフィルタする方法だが、比較演算子等で条件指定する

ただし単純に df["column_name"] > 1 とするのではなく、 df[df["column_name"] > 1] という形式で指定する。

import pandas as pd

data_list1 = [
[1,2,None],
[2,None,4],
[None,4,5],
[4,5,6]
]
col_list1 = ["c1","c2","c3"]
df1 = pd.DataFrame(data=data_list1, columns=col_list1)
print(df1)

#     c1   c2   c3
# 0  1.0  2.0  NaN
# 1  2.0  NaN  4.0
# 2  NaN  4.0  5.0
# 3  4.0  5.0  6.0

print(df1["c1"]>=2.0)
# 0    False
# 1     True
# 2    False
# 3     True
# Name: c1, dtype: bool

df2 = df1[df1["c1"]>=2.0]
print(df2)
#     c1   c2   c3
# 1  2.0  NaN  4.0
# 3  4.0  5.0  6.0


最初の df1["c1"]>=2.0 はデータを抽出するのではなく、条件に合う行を True 、合わない行を False としてboolean型のSeriesが返ってくる。

それを同じDataFrameに入力すると、 True の行のみ抽出できる。

この2段階の処理で条件に合致したデータのみを抽出している。



pandasのDataFrameを複数条件でフィルタする方法

では条件が複数になったらどうすればいいのか。

方法としては &| で条件を結合すればよい。

df3 = df1[ (df1["c1"]>=2.0) & (df1["c2"]>=3.0)]
print(df3)
#     c1   c2   c3
# 3  4.0  5.0  6.0

df4 = df1[ (df1["c1"]>=2.0) | (df1["c3"].isna())]
print(df4)
#     c1   c2   c3
# 0  1.0  2.0  NaN
# 1  2.0  NaN  4.0
# 3  4.0  5.0  6.0


&AND の意味なので、両方の条件に合致した行のみ抽出される。

|OR という意味なので複数条件のうちどれかひとつに合致する行が抽出される。



まとめ

今回はpandasのDataFrameを複数条件でフィルタする方法について紹介した。

DataFrameの一部を条件指定して抽出するには df[df["カラム名"] > 1] のような形でDataFrameの中で条件式を記述すればよい。

そして複数条件を指定したい場合は 条件式同士を &| で結合すれば複数の条件を指定できる。


ちょくちょく使うので覚えておきたいですね



今回のようなPythonを使ったスクリプト。

一度きりの計算であれば手元で処理を実行すればよいが、もし定期的に処理を実行しようと思うと開発マシンとは別に実行環境を用意する必要がある。

クラウド環境を使う方法もあるが、安価な小型マシンを用意するとランニングコストが抑えられるので検討すると良いかも知れない。

ITipsと同じようなブログを作る方法

ブログに興味がありますか?

もしブログに興味がある場合は↓このページ↓を参考にすれば、ITipsと同じ構成でブログを作ることができます

サーバー、ドメイン、ASPと【ブログに必要なものは全て】このページに書きました。
同じ構成でブログ作るのはいいけど、記事はマネしないでネ (TДT;)

ランキング参加中

にほんブログ村 IT技術ブログへ

他にもブログやSNSで紹介してくれると励みになります。

はてブのコメントで酷評されると泣きます(´;ω;`)

-Python
-

© 2024 ITips