事象 : 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:
# やりたい処理...