>백엔드 개발 >파이썬 튜토리얼 >Pandas 시리즈에서 사전을 사용하여 값을 바꾸는 것이 느린 이유는 무엇이며 성능을 어떻게 향상시킬 수 있습니까?

Pandas 시리즈에서 사전을 사용하여 값을 바꾸는 것이 느린 이유는 무엇이며 성능을 어떻게 향상시킬 수 있습니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-13 05:46:02699검색

Why is Using Dictionaries to Replace Values in Pandas Series Slow, and How Can You Improve Performance?

사전을 사용하여 Pandas 시리즈의 값 대체 성능 향상

사전을 사용하여 Pandas 시리즈의 값을 바꾸는 것은 일반적인 작업입니다. s.replace(d)를 사용하여 값을 바꾸는 것이 권장되지만 간단한 목록 이해를 사용하는 것보다 훨씬 느릴 수 있습니다.

성능 저하의 원인

느린 성능 s.replace(d)는 극단적인 경우와 드문 상황을 처리하는 데서 유래합니다. 여기에는 다음이 포함됩니다.

  • 사전을 목록으로 변환
  • 목록을 반복하고 중첩된 사전을 확인합니다.
  • 키와 값의 반복자를 기능 교체.

대체 방법

성능을 향상하려면 다음 방법을 사용하는 것이 좋습니다.

  • 전체 맵 : 계열의 모든 값이 사전에 의해 매핑되는 경우 s.map(d)를 사용하세요. 이 방법은 효율적이고 지속적으로 빠릅니다.
  • 부분 맵: 값의 작은 부분(예: 5% 미만)만 사전에 매핑되는 경우 s.map(d ).fillna(s['A']).astype(int). 이 접근 방식은 매핑과 채우기를 결합하여 값비싼 반복 작업이 필요하지 않습니다.

벤치마킹

벤치마크는 s.replace(d)와 s 간의 성능 차이를 보여줍니다. .map(d) 및 목록 이해:

##### Full Map #####

d = {i: i+1 for i in range(1000)}

%timeit df['A'].replace(d)                          # Slow (1.98s)
%timeit df['A'].map(d)                              # Fast (84.3ms)

##### Partial Map #####

d = {i: i+1 for i in range(10)}

%timeit df['A'].replace(d)                          # Intermediate (20.1ms)
%timeit df['A'].map(d).fillna(df['A']).astype(int)  # Faster (111ms)

이는 전체 또는 부분 매핑에서 s.map(d)가 s.replace(d)보다 일관되게 빠르다는 것을 보여줍니다.

결론

사전 적용 범위의 완전성에 따라 s.map(d) 또는 s.map(d).fillna(s['A']).astype(int) Pandas 시리즈에서 효율적인 값 교체를 위해서는 s.replace(d)보다 선호되어야 합니다.

위 내용은 Pandas 시리즈에서 사전을 사용하여 값을 바꾸는 것이 느린 이유는 무엇이며 성능을 어떻게 향상시킬 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.