The truth value of a Series is ambiguous.


事象 : Pandasで読み込んだExcelの行情報のNone判定で怒られた

  • 環境
    • Windows10 Pro バージョン1909
    • PyCharm 2020.2.2(Community Edition)
    • pandas 1.0.5
コンソールのエラー
The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
# 1. pandasを使って
import pandas as pd
# 2. Excelファイルを読み込んで
book = pd.read_excel(excel_file, sheet_name=None, header=None)
# 3. 任意のシートを読み込んで
sheet = book[sheet_name]
# 4. 1行づつ処理しようとして
for index, row in sheet.iterrows():
    # 5. 処理前に一応Noneを判定したい
    if not row:
        # やりたい処理...

原因 : 何に対してboolを使っているのか曖昧(ambiguous)だから

Pythonにおいて、if文の条件式やand, or, notの演算などでは、オブジェクトや式がbool値True, False)として評価される。
...省略...
numpy.ndarrayに対してbool値を評価しようとするとエラーとなるようになっている。
# bool(a_bool)
# ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
ambiguous(曖昧)という文言の通り、何に対してTrue, Falseを判定したいのか(オブジェクト=要素全体なのか、各要素なのか)が曖昧だというエラー。
NumPy, pandasのValueError: ...one element is ambiguousの対処法 | note.nkmk.me

今回エラーになった行情報(row)の型は、<class 'pandas.core.series.Series'>だけどnumpy.ndarrayと同じことが起こるとのこと。

対応 : はっきりと「Noneじゃなかったら」と書く

    # やりたいことはきちんと伝える
    if row is None:
        # やりたい処理...