Pythonの落とし穴

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

 

タイトルとURLをコピーしました