DataFrame全体で条件に合う値があるか判定するシンプルな実装
DataFrame全体で条件に合う値があるか、まとめて判定するシンプルな実装について説明します。
例えば、DataFrame全体で1つでも欠損値があるかどうか、全体の値がすべて100以上かどうかなどを判定する場合に使える実装になっています。
実装方法
実装は下のような形です。
# DataFrame全体で1つでも条件に該当する値があればTrue、そうでなければFalse
if bool(df.<全体を判定する関数>.any().any()):
print("True")
else:
print("False")
# DataFrame全体ですべての値が条件に該当すればTrue、そうでなければFalse
if bool(df.<全体を判定する関数>.all().all()):
print("True")
else:
print("False")<全体を判定する関数>にはDataFrame.eq()やDataFrame.isnull()などDataFrame全体に対してTrue/False判定をする関数を使い、そのあとany().any()、もしくはall().all()と続けます。
「全体で1つでも条件に該当する値があればTrue」と判定したい場合はany().any()を使用し、「全体ですべての値が条件に該当すればTrue」と判定したい場合はall().all()を使います。
最後にbool()を使っているのは、any().any()とall().all()の返値の型がnumpy.bool_となっているため、Pythonで通常使うbool型に変換しています。
具体例は下の通りです。
# DataFrame全体で1つでも欠損値があればTrue、そうでなければFalse
if bool(df.isnull().any().any()):
print("True")
else:
print("False")
# DataFrame全体ですべての値が100以上であればTrue、そうでなければFalse
if bool(df.ge(100).all().all()):
print("True")
else:
print("False")全体を判定する関数
下のDataFrameの関数などが<全体を判定する関数>として使用できます。
- 指定の値と等しい
DataFrame.eq(<指定の値>)
- 指定の値と不一致
DataFrame.ne(<指定の値>)
- 指定の値以下
DataFrame.le(<指定の値>)
- 指定の値より下
DataFrame.lt(<指定の値>)
- 指定の値以上
DataFrame.ge(<指定の値>)
- 指定の値より上
DataFrame.gt(<指定の値>)
- 欠損値である
DataFrame.isnull()もしくはDataFrame.isna()
- 欠損値ではない
DataFrame.notnull()もしくはDataFrame.notna()
応用
少し複雑になりますが、下のような判定もすることが可能です。
- 1行の中でいづれかの値が条件に該当し、それが全行に当てはまる場合Trueと判定する。
- 1行の中で全ての値が条件に該当し、それがいづれかの行に当てはまる場合Trueと判定する。
# 1行の中でいづれかの値が条件に該当し、それが全行に当てはまる場合True。
# そうでなければFalse
if bool(df.<全体を判定する関数>.any(axis='columns').all()):
print("True")
else:
print("False")
# 1行の中で全ての値が条件に該当し、それがいづれかの行に当てはまる場合True。
# そうでなければFalse
if bool(df.<全体を判定する関数>.all(axis='columns').any()):
print("True")
else:
print("False")関連タグの記事