예기치 않은 동작 없이 쿼리를 기반으로 Pandas 데이터프레임을 수정하려면 어떻게 해야 합니까?

Susan Sarandon
풀어 주다: 2024-11-03 17:25:02
원래의
427명이 탐색했습니다.

How Can I Modify Pandas Dataframes Based on Queries Without Unexpected Behavior?

Pandas 보기 및 복사 규칙 이해

문제 설명

Pandas, 인기 있는 Python 데이터 조작 라이브러리는 데이터프레임을 선택하고 수정하기 위한 다양한 방법을 제공합니다. 그러나 선택 항목이 원본 데이터 프레임의 복사본이나 그에 대한 뷰를 생성하는 시점을 결정하는 것은 혼란스러울 수 있습니다. 이러한 모호함은 데이터 수정을 시도할 때 예상치 못한 동작으로 이어집니다.

간단한 규칙

이러한 혼란을 해결하기 위해 Pandas의 보기 및 복사 동작을 제어하는 ​​몇 가지 간단한 규칙이 있습니다. :

  • 모든 작업은 일반적으로 복사본을 생성합니다.
  • inplace=True 인수가 지정되면 내부 수정이 이루어지지만 특정 작업만 이 기능을 지원합니다.
  • 설정에 사용되는 인덱서(예: .loc, .iloc, .iat, .at)는 값을 내부에서 설정합니다.
  • 단일 dtype 개체를 가져오는 데 사용되는 인덱서는 일반적으로 뷰를 반환합니다. 그러나 이 동작은 메모리 레이아웃 고려 사항으로 인해 완전히 신뢰할 수는 없습니다.
  • 다중 유형 개체를 가져오는 데 사용되는 인덱서는 항상 복사본을 생성합니다.

규칙 적용 대상 특정 사례

당신이 언급한 복잡한 사례를 살펴보겠습니다.

df[df.C <= df.B] = 7654321
로그인 후 복사

이 경우 인덱서로 설정하는 규칙이 적용됩니다. 조건에는 두 열의 비교가 포함되므로 Pandas는 조건을 평가하기 위해 데이터프레임의 중간 복사본을 만듭니다. 그런 다음 이 복사본은 내부에서 수정됩니다. 따라서 이 표현식은 원래 데이터 프레임의 값을 성공적으로 변경합니다.

그러나 연결된 인덱싱 표현식:

df[df.C <= df.B].ix[:, 'B':'E']
로그인 후 복사

은 규칙을 위반합니다. 두 개의 인덱서를 연결하면 별도의 Python 작업이 생성되므로 Pandas가 안정적으로 가로채기가 어렵습니다. 예상치 못한 동작이 발생할 수 있으므로 사용하지 않는 것이 좋습니다.

쿼리로 데이터 프레임 수정

쿼리를 기반으로 데이터 프레임 값을 수정하려면 다음 접근 방식을 사용하세요.

df.loc[df.C <= df.B, 'B':'E'] = 7654321
로그인 후 복사

이 표현식은 단일 인덱서를 사용하여 쿼리 조건을 평가하고 수정할 열의 하위 집합을 지정합니다. 체인 인덱싱 접근 방식보다 빠르고 안정적입니다.

위 내용은 예기치 않은 동작 없이 쿼리를 기반으로 Pandas 데이터프레임을 수정하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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