>  기사  >  백엔드 개발  >  Pandas 열 생성 시 np.Vectorize()가 df.apply()보다 빠른 이유는 무엇입니까?

Pandas 열 생성 시 np.Vectorize()가 df.apply()보다 빠른 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-10-27 04:34:30841검색

  Why is np.vectorize() Faster than df.apply() for Pandas Column Creation?

Pandas Apply와 np.Vectorize의 성능 비교

np.Vectorize()가 df보다 훨씬 더 빠를 수 있는 것으로 관찰되었습니다. Pandas DataFrame의 기존 열을 기반으로 새 열을 생성할 때 apply()를 사용합니다. 관찰된 성능 차이는 이 두 가지 방법이 사용하는 기본 메커니즘에서 비롯됩니다.

df.apply() 대 Python 수준 루프

df.apply()는 본질적으로 DataFrame의 각 행을 반복하는 Python 수준 루프입니다. 제공된 벤치마크에서 볼 수 있듯이 목록 이해 및 맵과 같은 Python 수준 루프는 모두 실제 벡터화된 계산에 비해 상대적으로 느립니다.

np.Vectorize() 대 df.apply()

np.Vectorize()는 사용자 정의 함수를 범용 함수(ufunc)로 변환합니다. Ufuncs는 고도로 최적화되어 있으며 C 기반 코드와 최적화된 알고리즘을 활용하여 NumPy 배열에서 요소별 작업을 수행할 수 있습니다. 이는 Pandas 시리즈 객체에서 작동하고 추가 오버헤드를 발생시키는 df.apply()와 대조됩니다.

진정한 벡터화: 최적의 성능

정말 효율적인 열 생성 , NumPy 내에서 벡터화된 계산을 적극 권장합니다. numpy.where 및 df["A"] / df["B"]를 사용한 직접적인 요소별 분할과 같은 작업은 매우 빠르며 루프와 관련된 오버헤드를 방지합니다.

Numba 최적화

더 큰 효율성을 위해 Python 함수를 최적화된 C 코드로 변환하는 컴파일러인 Numba를 사용하여 루프를 더욱 최적화할 수 있습니다. Numba는 실행 시간을 마이크로초 단위로 줄여 df.apply() 및 np.Vectorize()보다 훨씬 뛰어난 성능을 발휘합니다.

결론

np.Vectorize()는 다음을 제공할 수 있습니다. df.apply()에 비해 약간 개선되었지만 NumPy의 벡터화된 계산을 대체할 수는 없습니다. 최대 성능을 달성하려면 Numba 최적화 또는 NumPy 내에서 직접 벡터화 작업을 활용하여 Pandas DataFrames에서 새 열을 생성하세요.

위 내용은 Pandas 열 생성 시 np.Vectorize()가 df.apply()보다 빠른 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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