> 백엔드 개발 > 파이썬 튜토리얼 > 일련의 사전 기반 값 대체에 어떤 Pandas 방법이 더 성능이 좋나요?

일련의 사전 기반 값 대체에 어떤 Pandas 방법이 더 성능이 좋나요?

Patricia Arquette
풀어 주다: 2024-11-15 20:01:02
원래의
980명이 탐색했습니다.

Which Pandas Method Outperforms for Dictionary-Based Value Replacement in Series?

Pandas 시리즈의 값을 사전으로 바꾸기 위한 성능 고려 사항

Pandas 시리즈의 값을 사전으로 바꾸는 것은 지속적인 관심사였습니다. 커뮤니티. 권장되는 방법은 s.replace(d) 또는 s.map(d)이지만 데이터 세트의 특성에 따라 성능이 크게 달라질 수 있습니다.

벤치마킹

성능 차이를 설명하기 위해 0에서 999 사이의 임의의 정수를 포함하는 DataFrame df를 고려해 보겠습니다.

import pandas as pd, numpy as np

df = pd.DataFrame({'A': np.random.randint(0, 1000, 1000000)})
로그인 후 복사

일반 사례

값을 매핑하는 사전 d를 생성하는 경우 그 후속 항목(예: d = {i: i 1 for i in range(1000)})에서는 다음을 관찰합니다.

# Full-range dictionary
%timeit df['A'].replace(d)  # 1.98s
%timeit df['A'].map(d)  # 84.3ms

# Partial-range dictionary
d = {i: i+1 for i in range(10)}
%timeit df['A'].replace(d)  # 20.1ms
%timeit df['A'].map(d).fillna(df['A']).astype(int)  # 111ms
로그인 후 복사

최적 방법 선택

기반 벤치마킹을 통해 s.map이 두 시나리오 모두에서 우수하다는 것이 분명해졌습니다.

  • 전체 지도: 전체 범위를 포괄하려면 s.map(d)를 사용하세요.
  • 부분 맵(예: < 5% 값): s.map(d).fillna(s['A']).astype(int)을 사용하여 누락된 값을 채웁니다.

s.replace가 느린 이유는 무엇인가요?

s.replace는 s.map보다 더 광범위한 작업을 수행합니다. 여기에는 사전을 목록으로 변환하고 이를 반복하며 교체를 수행하기 전에 중첩된 사전을 확인하는 과정이 포함됩니다.

반대로 s.map은 주어진 인수가 사전인지 시리즈인지 확인하고 다음과 같은 경우 변환합니다. 필요한. 인덱스를 기반으로 값을 효율적으로 매핑합니다.

대체 옵션

성능이 중요한 특정 경우:

  • List Comprehension: List Comprehension을 사용하여 대체 작업을 수행하는 것이 s.map보다 약간 빠를 수 있습니다.
  • s.apply(pd.to_numeric): 이 방법은 성능을 크게 향상시킬 수 있습니다. 값을 누락되거나 숫자가 아닌 데이터로 바꾸는 경우.

결론

Pandas 시리즈의 값을 사전으로 바꾸는 최적의 선택은 다음 요소에 따라 달라집니다. DataFrame의 크기, 사전의 고유 값 수, 매핑의 완전성 등이 이에 해당합니다. 개발자는 이러한 요소를 신중하게 고려하여 특정 상황에 가장 효율적인 방법을 선택할 수 있습니다.

위 내용은 일련의 사전 기반 값 대체에 어떤 Pandas 방법이 더 성능이 좋나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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