2023. 4. 6. 23:44ㆍ코딩/파이썬
다음과 같이 info
가 비었는지 안 비었는지 확인하여 제대로 읽어왔는지 보려고 했는데, 시리즈의 Truth Value가 모호하다는 오류를 만났다. Truth Value
란 참거짓을 나타낼 수 있는 값으로, 파이썬에서는 True
와 False
를 뜻한다.
def get_info(old_code, new_code):
tmp = obj.origin[obj.origin['코드(관리번호)'].str.contains(old_code, case=False, na=False)]
cols = ['제조사', '반출(증)', '반환(증)', '현위치', '분류', '제조사', '모델명', '시리얼넘버', '자산관리번호']
info = tmp[cols]
if info : <----- 발생 위치
print("[*] 정보 가져오기 성공 ...\n")
print(tabulate(info, headers=cols, tablefmt='fancy_outline'))
위 코드를 보면 if 문은 True
아니면 False
를 요구하는데, 리스트나 딕셔너리는 저렇게 표현해도 아무 문제가 없다.
하지만 시리즈는 '시리즈 자체'에 어떤 값이 있을 때 True
를 리턴하는 것이 아니라, 시리즈에 들어있는 각 값에 True
나 False
가 리턴된다. 말로 하니 어려운데, 그림으로 표현하면 다음과 같다.
(사실 데이터프레임에 NaN값이 있으면 ambiguous 어쩌구 하는 다른 오류가 발생하지만, 이를 처리해줬다고 가정하고 NaN은 False로 친다.)
이렇게 여러 개의 Truth Value가 리턴되다 보니 if문 입장에서는 어떤 값을 사용해야 하는 것인지 모르기 때문에 'ambiguous', 모호하다는 에러가 발생하는 것이다.
이 에러는 데이터프레임에서 조건식을 적용하여 데이터프레임의 복사본을 만들 때 자주 발생한다고 한다.
애시당초 나는 그냥 값이 있는지 없는지만 확인하면 됐으므로, info
의 길이를 체크하는 것으로 코드를 수정하여 오류를 해결했다.
if len(info) > 0 :
...이하 생략 ...
Reference
ValueError: The truth value of a series is ambiguous. use a.empty, a.bool(), a.item(), a.any() or a.all() – LearnDataSci
Cookie Policy We use cookies to operate this website, improve usability, personalize your experience, and improve our marketing. Privacy Policy. By clicking "Accept" or further use of this website, you agree to allow cookies. Accept You are reading solutio
www.learndatasci.com
'코딩 > 파이썬' 카테고리의 다른 글
[파이썬 오류] ValueError : cannot mask with non-boolean array containing na / nan values (0) | 2023.04.07 |
---|---|
[파이썬 오류]TypeError : 'method' object is not subscriptable (0) | 2023.04.06 |
[Selenium] 네이버 로그인 (0) | 2023.02.09 |
파이썬 자동화 라이브러리 (0) | 2023.02.09 |
파이썬 데이터프레임(Dataframe) (0) | 2023.02.09 |