열 생성 시 Pandas Apply와 NumPy Vectorize의 성능
소개
Pandas ' df.apply()는 데이터프레임에서 작동하는 다목적 함수입니다. 특히 대규모 데이터세트의 경우 성능이 문제가 될 수 있습니다. NumPy의 np.Vectorize()는 기존 열의 함수로 새 열을 생성할 수 있는 잠재적인 대안을 제공합니다. 이 기사에서는 두 가지 방법의 속도 차이를 조사하고 np.Vectorize()가 일반적으로 더 빠른 이유를 설명합니다.
성능 비교
광범위한 벤치마킹 결과 np.Vectorize( )는 지속적으로 df.apply()보다 상당한 차이로 성능이 뛰어났습니다. 예를 들어, 100만 행이 있는 데이터세트에서 np.Vectorize()는 2016 MacBook Pro에서 25배 더 빨랐습니다. 이러한 차이는 데이터세트 크기가 커질수록 더욱 두드러집니다.
기본 메커니즘
df.apply()는 일련의 Python 수준 루프를 통해 작동합니다. 간접비. 각 반복에는 새로운 Pandas Series 객체 생성, 함수 호출 및 결과를 새 열에 추가하는 작업이 포함됩니다. 대조적으로, np.Vectorize()는 NumPy의 브로드캐스팅 규칙을 활용하여 배열의 함수를 평가합니다. 이 접근 방식은 Python 루프의 오버헤드를 우회하고 최적화된 C 코드를 활용하여 훨씬 더 빠른 실행을 제공합니다.
진정한 벡터화
진정한 벡터화 계산의 경우 df.apply도 마찬가지입니다. ()도 np.Vectorize()도 최적이 아닙니다. 대신 기본 NumPy 작업은 뛰어난 성능을 제공합니다. 예를 들어 벡터화된 Divide()는 df.apply() 또는 np.Vectorize()에 비해 극적인 성능 이점을 보여줍니다.
Numba를 사용한 JIT 컴파일
효율성을 더욱 높이려면 Numba의 @njit 데코레이터를 사용하여 Divide() 함수를 효율적인 C 수준 코드로 컴파일할 수 있습니다. 이 접근 방식은 실행 시간을 더욱 줄여 초 단위가 아닌 마이크로초 단위로 결과를 산출합니다.
결론
df.apply()는 데이터 프레임에 함수를 적용하기 위한 편리한 인터페이스를 제공하지만, 대규모 데이터 세트에서는 성능 한계가 명백해집니다. 성능이 중요한 애플리케이션의 경우 NumPy의 np.Vectorize()와 Numba의 JIT 컴파일 대응 기능은 새 열을 생성하는 데 뛰어난 속도를 제공합니다. 또한 기본 NumPy 함수를 사용하는 진정한 벡터화된 작업은 대규모 데이터 조작을 위한 가장 효율적인 옵션이라는 점도 주목할 가치가 있습니다.
위 내용은 Pandas Apply와 NumPy Vectorize: 새 열을 생성하는 데 어느 것이 더 빠릅니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!