1.Pythonの落とし穴
pythonを使っていて嵌ったことなどをつれづれに
1.any()の罠
DataFrame内に特定の単語が含まれるか否かをチェックするisin()などをif文の条件などに使うと以下のようなエラーメッセージが出る事がある。
ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
ここでエラーメッセージの意味を読み違えて普通のany()を使うとエラーにはならないけれども期待する結果と異なってしまうので要注意
import pandas as pd import numpy array1 = ['apple', 'orange'] df = pd.DataFrame(array1, columns=['fruits']) print("df") print(df) print("----------------") print("df.isin(['apple'])") print(df.isin(['apple'])) print("any(df.isin(['apple']))") print(any(df.isin(['apple']))) # これはTrueを期待してTrueが返ってくるので問題なし print("----------------") print("df.isin(['melon'])") print(df.isin(['melon'])) print("any(df.isin(['melon']))") print(any(df.isin(['melon']))) # これもエラーなしでTrueが返ってきてしまう! print("----------------") #正しくはnumpy.anyまたは print("numpy.any(df.isin(['melon']))") print(numpy.any(df.isin(['melon']))) #メソッド形式でany()を使う print("df['fruits'].isin(['melon']).any()") print(df['fruits'].isin(['melon']).any())