부울(True/False) 값을 담고 있는 판다스 시리즈가 하나 주어져 있고, 이 시리즈에 대한 각 부울 연산의 결과가 아래와 같다고 가정해 보겠습니다.
AND 연산 결과: 0 True 1 True 2 False dtype: bool OR 연산 결과: 0 True 1 True 2 True dtype: bool XOR 연산 결과: 0 False 1 False 2 True dtype: bool
해결 방법
이 문제는 다음과 같은 단계로 해결할 수 있습니다.
시리즈 정의 — 부울 값과 NaN 값을 함께 포함하는 시리즈를 만들되, dtype을 "bool"로 지정합니다.
AND 연산 — 정의된 시리즈의 모든 요소에
True와 비트별 AND(&) 연산을 적용합니다.OR 연산 — 정의된 시리즈의 모든 요소에
True와 비트별 OR(|) 연산을 적용합니다.XOR 연산 — 정의된 시리즈의 모든 요소에
True와 비트별 XOR(^) 연산을 적용합니다.
series_and = pd.Series([True, np.nan, False], dtype="bool") & True series_or = pd.Series([True, np.nan, False], dtype="bool") | True series_xor = pd.Series([True, np.nan, False], dtype="bool") ^ True
핵심 포인트: dtype을 "bool"로 지정하면 NaN 값이 자동으로 True로 변환됩니다. 부울 타입은 결측값을 표현할 수 없기 때문입니다. 따라서 인덱스 1의 NaN은 True로 취급되어 연산 결과에 그대로 반영됩니다.
예제 코드
전체 구현 코드를 통해 더 자세히 살펴보겠습니다.
import pandas as pd
import numpy as np
series_and = pd.Series([True, np.nan, False], dtype="bool") & True
print("AND 연산 결과: \n", series_and)
series_or = pd.Series([True, np.nan, False], dtype="bool") | True
print("OR 연산 결과: \n", series_or)
series_xor = pd.Series([True, np.nan, False], dtype="bool") ^ True
print("XOR 연산 결과: \n", series_xor)
출력 결과
AND 연산 결과: 0 True 1 True 2 False dtype: bool OR 연산 결과: 0 True 1 True 2 True dtype: bool XOR 연산 결과: 0 False 1 False 2 True dtype: bool
결과 분석
각 연산 결과는 다음과 같은 기본 논리 규칙에서 비롯됩니다.
AND(&) — 두 값이 모두 True일 때만 True를 반환합니다. 따라서
False & True는 False가 됩니다.OR(|) — 두 값 중 하나라도 True이면 True를 반환합니다. 어떤 값이라도
True와 OR 연산을 하면 항상 True가 됩니다.XOR(^) — 두 값이 서로 다를 때만 True를 반환합니다. 즉,
True ^ True는 False이고False ^ True는 True입니다.