Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapakah `s.replace` Pandas Lambat untuk Penggantian Nilai Berasaskan Kamus?

Mengapakah `s.replace` Pandas Lambat untuk Penggantian Nilai Berasaskan Kamus?

DDD
DDDasal
2024-11-19 21:45:03518semak imbas

Why is Pandas' `s.replace` Slow for Dictionary-Based Value Replacement?

Memahami Jurang Prestasi Antara s.replace dan Kaedah Penggantian Nilai Lain dalam Panda

Menggantikan nilai dalam siri Pandas menggunakan kamus ialah tugas biasa. Walau bagaimanapun, s.replace, kaedah yang disyorkan untuk operasi ini, selalunya menunjukkan prestasi yang jauh lebih perlahan berbanding kaedah alternatif seperti pemahaman senarai.

Punca Kelambatan s.replace

s.replace melakukan pemprosesan tambahan melangkaui pemetaan kamus mudah. Ia mengendalikan kes tepi dan situasi yang jarang berlaku, yang memerlukan operasi yang lebih kompleks dan memakan masa. Khususnya, s.replace menukar kamus kepada senarai, menyemak kamus bersarang dan melelang melalui senarai untuk menyuap kekunci dan nilai ke dalam fungsi ganti yang berasingan. Overhed ini melambatkan proses dengan ketara.

Mengoptimumkan Penggantian Nilai

Untuk mengoptimumkan penggantian nilai, garis panduan berikut harus dipatuhi:

  • Gunakan s.map(d) apabila semua nilai siri diliputi oleh kekunci kamus. s.map menunjukkan prestasi cemerlang dalam senario ini.
  • Gunakan s.map(d).fillna(s['A']).astype(int) apabila lebih daripada 5% daripada nilai siri diliputi oleh kekunci kamus. Kaedah ini menggabungkan kecekapan s.map dengan keupayaan untuk mengendalikan nilai yang hilang.
  • Gunakan s.replace(d) apabila sebilangan kecil nilai (kurang daripada 5%) perlu diganti. s.replace adalah secara perbandingan lebih pantas dalam situasi ini.

Petanda aras

Hasil penandaarasan menunjukkan perbezaan prestasi antara pelbagai kaedah penggantian:

UJIAN 1 - Penuh Peta

%timeit df['A'].replace(d)  # 1.98s
%timeit df['A'].map(d)      # 84.3ms
%timeit [d[i] for i in lst]  # 134ms

UJIAN 2 - Peta Separa

%timeit df['A'].replace(d)                  # 20.1ms
%timeit df['A'].map(d).fillna(df['A']).astype(int)  # 111ms
%timeit [d.get(i, i) for i in lst]                  # 243ms

Keputusan ini jelas menunjukkan bahawa s.map dan versi diubah suainya berprestasi lebih pantas daripada s. .ganti, terutamanya apabila sebahagian besar nilai siri diliputi oleh kekunci kamus.

Atas ialah kandungan terperinci Mengapakah `s.replace` Pandas Lambat untuk Penggantian Nilai Berasaskan Kamus?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn