사전 기반 값 교체 시 Pandas의 `s.replace`가 느린 이유는 무엇입니까?

DDD
풀어 주다: 2024-11-19 21:45:03
원래의
516명이 탐색했습니다.

Why is Pandas' `s.replace` Slow for Dictionary-Based Value Replacement?

Pandas에서 s.replace와 다른 값 대체 방법 간의 성능 차이 이해

사전을 사용하여 Pandas 시리즈의 값을 바꾸는 것은 일반적인 작업. 그러나 이 작업에 권장되는 방법인 s.replace는 List Comprehension과 같은 대체 방법에 비해 성능이 현저히 느린 경우가 많습니다.

s.replace 속도 저하의 근본 원인

s.replace는 단순한 사전 매핑 이상의 추가 처리를 수행합니다. 더 복잡하고 시간이 많이 걸리는 작업이 필요한 극단적인 경우와 드문 상황을 처리합니다. 특히 s.replace는 사전을 목록으로 변환하고, 중첩된 사전을 확인하고, 목록을 반복하여 키와 값을 별도의 교체 함수에 공급합니다. 이 오버헤드로 인해 프로세스 속도가 크게 느려집니다.

값 교체 최적화

값 교체를 최적화하려면 다음 지침을 따라야 합니다.

  • 모든 계열 값이 사전 키에 포함되는 경우 s.map(d)을 사용하세요. s.map은 이 시나리오에서 뛰어난 성능을 보여줍니다.
  • 5% 이상이면 s.map(d).fillna(s['A']).astype(int)을 사용하세요. 계열 값은 사전 키로 보호됩니다. 이 방법은 s.map의 효율성과 누락된 값을 처리하는 기능을 결합합니다.
  • 소수의 값(5% 미만)이 필요한 경우 s.replace(d)를 사용하세요. 교체됩니다. 이 상황에서는 s.replace가 비교적 빠릅니다.

벤치마킹

벤치마킹 결과는 다양한 교체 방법 간의 성능 차이를 보여줍니다.

테스트 1 - 전체 지도

%timeit df['A'].replace(d)  # 1.98s
%timeit df['A'].map(d)      # 84.3ms
%timeit [d[i] for i in lst]  # 134ms
로그인 후 복사

테스트 2 - 부분 지도

%timeit df['A'].replace(d)                  # 20.1ms
%timeit df['A'].map(d).fillna(df['A']).astype(int)  # 111ms
%timeit [d.get(i, i) for i in lst]                  # 243ms
로그인 후 복사

이러한 결과는 s.map과 수정된 버전이 s보다 훨씬 빠르게 수행된다는 것을 분명히 나타냅니다. .replace, 특히 계열 값의 상당 부분이 사전 키로 덮여 있는 경우.

위 내용은 사전 기반 값 교체 시 Pandas의 `s.replace`가 느린 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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