Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapa np.vectorize() Lebih cepat daripada df.apply() untuk Penciptaan Lajur Pandas?
Perbandingan Prestasi Panda diguna pakai vs np.vectorize
Telah diperhatikan bahawa np.vectorize() boleh jauh lebih cepat daripada df. apply() apabila mencipta lajur baharu berdasarkan lajur sedia ada dalam Pandas DataFrame. Perbezaan prestasi yang diperhatikan berpunca daripada mekanisme asas yang digunakan oleh kedua-dua kaedah ini.
df.apply() vs Python-Level Loops
df.apply() pada asasnya mencipta gelung peringkat Python yang berulang pada setiap baris DataFrame. Seperti yang ditunjukkan dalam penanda aras yang disediakan, gelung peringkat Python seperti pemahaman senarai dan peta semuanya agak perlahan berbanding dengan pengiraan vektor sebenar.
np.vectorize() vs df.apply()
np.vectorize() menukar fungsi yang ditentukan pengguna kepada fungsi universal (ufunc). Ufuncs sangat dioptimumkan dan boleh melakukan operasi mengikut elemen pada tatasusunan NumPy, memanfaatkan kod berasaskan C dan algoritma yang dioptimumkan. Ini berbeza dengan df.apply(), yang beroperasi pada objek Siri Pandas dan menimbulkan overhed tambahan.
Vektorisasi Benar: Prestasi Optimum
Untuk penciptaan lajur yang benar-benar cekap , pengiraan vektor dalam NumPy amat disyorkan. Operasi seperti numpy.where dan pembahagian langsung mengikut unsur dengan df["A"] / df["B"] adalah sangat pantas dan mengelakkan overhed yang dikaitkan dengan gelung.
Pengoptimuman Numba
Untuk kecekapan yang lebih besar, adalah mungkin untuk mengoptimumkan lagi gelung menggunakan Numba, pengkompil yang menterjemahkan fungsi Python kepada kod C yang dioptimumkan. Numba boleh mengurangkan masa pelaksanaan kepada mikrosaat, dengan ketara mengatasi prestasi kedua-dua df.apply() dan np.vectorize().
Kesimpulan
Sementara np.vectorize() mungkin menawarkan sedikit penambahbaikan berbanding df.apply(), ia bukan pengganti sebenar untuk pengiraan vektor dalam NumPy. Untuk mencapai prestasi maksimum, gunakan pengoptimuman Numba atau operasi vektor langsung dalam NumPy untuk penciptaan lajur baharu dalam Pandas DataFrames.
Atas ialah kandungan terperinci Mengapa np.vectorize() Lebih cepat daripada df.apply() untuk Penciptaan Lajur Pandas?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!