여러 조건을 사용하는 Pandas 인덱싱이 예기치 않은 동작을 보이는 이유는 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-10-25 09:47:02
원래의
155명이 탐색했습니다.

Why Does Pandas Indexing with Multiple Conditions Exhibit Unexpected Behavior?

Pandas 다중 조건 인덱싱: 예기치 않은 동작

Pandas에서는 DataFrame에 필터를 적용하는 것이 일반적인 작업입니다. 그러나 여러 조건을 사용하는 경우, 특히 AND 및 OR과 같은 논리 연산자를 사용하는 경우 예기치 않은 결과가 발생할 수 있습니다.

문제:

두 열의 값을 기준으로 행을 필터링하는 경우 , AND 연산자는 OR처럼 동작하고 그 반대의 경우도 마찬가지입니다. 예를 들어 아래 코드는 다음과 같습니다.

  • 두 열 값 중 하나가 -1인 행을 제외하려면 AND 연산자를 사용하세요.
  • 두 열 값이 모두 -1인 행을 제외하려면 OR 연산자를 사용하세요. -1.
<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) & (df.b != -1)]
df2 = df[(df.a != -1) | (df.b != -1)]

print(pd.concat([df, df1, df2], axis=1,
                keys=['original df', 'using AND (&)', 'using OR (|)',]))</code>
로그인 후 복사

설명:

예상치 못한 동작은 Pandas 인덱싱의 맥락에서 논리 연산자가 해석되는 방식에서 비롯됩니다.

  • AND 연산자:

    • df[(df.a != -1) & (df.b != -1)]는 다음을 의미합니다. "df.a가 -1이 아니고 df.b가 -1이 아닌 행 유지".
    • 이렇게 하면 하나 이상의 값이 -1인 행이 필터링됩니다.
  • OR 연산자:

    • df[(df.a != -1) | (df.b != -1)]은 "df.a 또는 df.b가 -1이 아닌 행 유지"를 의미합니다.
    • 이렇게 하면 두 값이 모두 -1인 행이 필터링됩니다.

따라서 AND 연산자는 두 열 중 하나에 -1이 없으면 행을 제외하므로 OR처럼 동작합니다. 반대로 OR 연산자는 두 열에 -1이 포함되지 않은 경우에만 행을 포함하므로 AND처럼 동작합니다.

추가 참고:

  • 사용하는 것이 좋습니다. 더 깨끗하고 안전한 코드 실행을 위해 체인 색인 생성(예: df'a' = -1) 대신 .loc 및 .iloc를 사용합니다.

위 내용은 여러 조건을 사용하는 Pandas 인덱싱이 예기치 않은 동작을 보이는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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