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")