Penapisan Panda yang Cekap untuk Berbilang Subrentetan dalam Siri
Menentukan sama ada siri mengandungi mana-mana daripada beberapa subrentetan ialah tugas biasa dalam analisis data. Semasa menggunakan logik atau untuk menggabungkan operasi str.contains individu menawarkan penyelesaian yang mudah, ia boleh menjadi tidak cekap untuk senarai subrentetan panjang dan bingkai data yang besar.
Untuk mengoptimumkan tugas ini, pertimbangkan untuk menggunakan pendekatan ekspresi biasa (regex). Dengan membungkus subrentetan dalam corak regex, kami boleh memanfaatkan fungsi padanan rentetan yang cekap panda. Khususnya, selepas melarikan diri daripada mana-mana aksara khas dalam subrentetan, kita boleh membina corak regex dengan menggabungkan subrentetan menggunakan aksara paip (|):
import re esc_lst = [re.escape(s) for s in lst] pattern = '|'.join(esc_lst)
Dengan corak ini, kita boleh menapis siri menggunakan str. mengandungi dan padanan tidak sensitif huruf besar dan kecil:
df[col].str.contains(pattern, case=False)
Pendekatan ini menawarkan prestasi yang lebih baik, terutamanya untuk bingkai data yang besar. Pertimbangkan contoh berikut:
from random import randint, seed seed(321) # 100 substrings of 5 characters lst = [''.join([chr(randint(0, 256)) for _ in range(5)]) for _ in range(100)] # 50000 strings of 20 characters strings = [''.join([chr(randint(0, 256)) for _ in range(20)]) for _ in range(50000)] col = pd.Series(strings) esc_lst = [re.escape(s) for s in lst] pattern = '|'.join(esc_lst)
Menggunakan pendekatan yang dioptimumkan ini, operasi penapisan mengambil masa lebih kurang 1 saat untuk 50,000 baris dan 100 subrentetan, jauh lebih pantas daripada kaedah yang diterangkan dalam soalan asal. Perbezaan prestasi menjadi lebih ketara untuk senarai bingkai data dan subrentetan yang lebih besar.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menapis Siri Panda dengan Cekap untuk Berbilang Subrentetan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!