Saya memiliki dataset dengan 19 kolom dan sekitar 250rb baris. Saya telah bekerja dengan kumpulan data yang lebih besar, tetapi kali ini, Pandas memutuskan untuk bermain dengan saraf saya.
Saya mencoba untuk membagi dataset asli menjadi 3 sub-dataframe berdasarkan beberapa aturan sederhana. Namun, butuh waktu lama untuk mengeksekusi kode. Sekitar 15-20 detik hanya untuk penyaringan.
Adakah cara alternatif yang akan meningkatkan kinerja kode?
import pandas as pd
#read dataset
df = pd.read_csv('myData.csv')
#create a dataframe with col1 10 and col2 <= 15
df1 = df[(df.col1 == 10) & (df.col2 <= 15)]
df = df[~df.isin(df1)].dropna()
#create a dataframe with col3 7 and col4 >= 4
df2 = df[(df.col3 == 7) & (df.col4 >= 4)]
df = df[~df.isin(df2)].dropna()
Pada akhirnya, saya memiliki df1, df2, df
dataframe dengan data yang difilter.
sumber
Sudahkah Anda menghitung waktu baris kode mana yang paling memakan waktu? Saya curiga bahwa
df = df[~df.isin(df1)].dropna()
sambungan itu akan memakan waktu lama. Apakah akan lebih cepat jika Anda hanya menggunakan negasi dari kondisi yang Anda terapkan untuk memperolehdf1
, ketika Anda ingin menyaring barisdf1
daridf
?Yaitu, gunakan
df = df[(df.col1 != 10) | (df.col2 > 15)]
.sumber
Selain saran di jawaban lain, ada baiknya jika kita menambahkan bidang pencarian ke indeks DataFrame. Ref: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html
Pandas DataFrames mendukung multi-indeks juga. Ref: https://pandas.pydata.org/pandas-docs/stable/user_guide/advanced.html
Contohnya dapat ditemukan di sini https://stackoverflow.com/a/58061800/2130670
sumber