여러 조건으로 데이터 프레임을 필터링할 때 Pandas의 AND 연산자(&)가 OR 연산자(|)처럼 동작하는 이유는 무엇입니까?

Susan Sarandon
풀어 주다: 2024-10-26 08:57:30
원래의
784명이 탐색했습니다.

Why does the AND operator (&) in pandas behave like the OR operator (|) when filtering data frames by multiple conditions?

pandas: 여러 조건으로 데이터 프레임 필터링

Pandas에서 여러 열의 값을 기준으로 데이터 프레임을 필터링하는 것은 까다로울 수 있습니다. AND 연산자(&)를 사용하면 OR 연산자(|)처럼 작동할 것으로 예상할 수 있으며 그 반대도 마찬가지입니다.

다음 테스트 코드를 고려하세요.

<code class="python">df = pd.DataFrame({'a': range(5), 'b': range(5) })
df['a'][1] = -1
df['b'][1] = -1
df['a'][3] = -1
df['b'][4] = -1
df1 = df[(df.a != -1) &amp; (df.b != -1)]
df2 = df[(df.a != -1) | (df.b != -1)]
print(pd.concat([df, df1, df2], axis=1, keys=[ 'original df', 'using AND (&amp;)', 'using OR (|)',]))</code>
로그인 후 복사

예상치 못한 결과

      original df      using AND (&amp;)      using OR (|)    
             a  b              a   b             a   b
0            0  0              0   0             0   0
1           -1 -1            NaN NaN           NaN NaN
2            2  2              2   2             2   2
3           -1  3            NaN NaN            -1   3
4            4 -1            NaN NaN             4  -1

[5 rows x 6 columns]
로그인 후 복사

AND 연산자(&)는 하나 이상의 값이 -1인 모든 행을 삭제하는 반면, OR 연산자(|)는 두 값이 모두 -1인 행만 삭제합니다. 이 동작은 예상한 것과 반대입니다.

이 동작의 이유는 이러한 연산자가 사용되는 방식에 있습니다. AND 조건에서는 두 조건이 모두 true인 행을 유지하도록 지정합니다. 이는 하나 이상의 조건이 false인 행을 삭제하는 것과 같습니다. 대조적으로, OR 조건은 두 조건 중 하나가 true인 행을 유지하도록 지정합니다. 이는 두 조건이 모두 false인 행을 삭제하는 것과 같습니다.

명확성을 보장하고 혼란을 피하기 위해 조건에 ​​대해 명시적인 표기법을 사용하는 것이 좋습니다. 여러 열이 포함됩니다. 여러 조건을 연산자로 연결하는 대신 괄호를 사용하여 조건을 그룹화하고 논리적 관계를 명시적으로 만듭니다.

예를 들어 다음 코드는 AND 조건을 명시적으로 지정합니다.

<code class="python">df1 = df[(df.a != -1) & (df.b != -1)]</code>
로그인 후 복사

다음 코드는 코드는 OR 조건을 명시적으로 지정합니다.

<code class="python">df2 = df[(df.a != -1) | (df.b != -1)]</code>
로그인 후 복사

명시적 표기법을 사용하면 조건이 의도한 대로 해석되도록 하고 예상치 못한 동작을 방지할 수 있습니다.

위 내용은 여러 조건으로 데이터 프레임을 필터링할 때 Pandas의 AND 연산자(&)가 OR 연산자(|)처럼 동작하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿