Polars vs pandas: Kapan Pindah dan Kapan Tidak Perlu
TL;DR
Polars adalah library DataFrame berbasis Rust yang jalan paralel di semua core CPU dan punya lazy mode, jadi query panjang dioptimasi dulu sebelum dieksekusi. pandas lebih tua, ekosistemnya jauh lebih luas, dan hampir semua tutorial di internet pakai pandas. Patokan praktis: kalau file kamu di bawah 1 juta baris dan script-nya jalan di bawah 10 detik, tetap di pandas. Kalau kamu udah sering nunggu lebih dari satu menit atau kena error kehabisan memori, Polars pantas dicoba.
Polars adalah library DataFrame untuk Python yang ditulis dalam bahasa Rust, jalan paralel di semua core CPU, dan punya lazy mode yang mengoptimasi query sebelum dieksekusi.
pandas adalah library DataFrame yang udah dipakai sejak 2008, jadi standar de facto, dan tersambung ke hampir semua tool analisis Python lainnya.
Pertanyaan yang sering muncul di grup data Indonesia bukan "mana yang lebih cepat". Itu udah jelas. Yang lebih berguna: kapan pindah beneran worth it, dan kapan cuma bikin kerjaan nambah.
Aku bakal bandingkan keduanya dari sisi kecepatan, sintaks, ekosistem, dan biaya belajar. Plus patokan angka yang bisa langsung kamu pakai buat mutusin.
Apa bedanya Polars dan pandas?
pandas memproses data satu core, nyimpen semua di memori, dan langsung menjalankan tiap baris kode yang kamu tulis. Polars memproses paralel di semua core, pakai format kolom Apache Arrow, dan bisa menunda eksekusi sampai kamu minta hasilnya. Perbedaan itu yang bikin Polars jauh lebih cepat di data besar, sementara pandas menang di jumlah tutorial dan library pendukung.
Detail teknisnya bisa kamu cek langsung di dokumentasi resmi Polars.
Satu hal yang sering disalahpahami: Polars bukan versi pandas yang dipercepat. Cara nulisnya beda, dan sebagian kebiasaan pandas kamu justru bakal nyusahin.
Seberapa jauh bedanya dalam angka?
Aku uji pakai data penjualan toko_berkah versi besar, 12 juta baris transaksi dalam format CSV berukuran 2,1 GB. Laptopnya M2 dengan RAM 16 GB.
Tugasnya sederhana: baca file, filter transaksi 2025, kelompokkan per cabang dan kategori produk, hitung total omzet dan rata-rata nilai transaksi.
| Tahap | pandas | Polars (eager) | Polars (lazy) |
|---|---|---|---|
| Baca CSV | 47 detik | 9 detik | 0 detik (ditunda) |
| Filter + groupby | 21 detik | 4 detik | - |
| Total sampai hasil | 68 detik | 13 detik | 6 detik |
| Puncak pemakaian RAM | 9,8 GB | 3,4 GB | 1,2 GB |
Angka yang paling penting bukan yang 68 detik jadi 6 detik. Yang penting kolom terakhir.
pandas butuh 9,8 GB RAM buat file 2,1 GB. Di laptop kantor dengan RAM 8 GB, script itu gak jalan sama sekali. Polars lazy cuma pakai 1,2 GB karena dia gak pernah baca 31 kolom yang gak dipakai.
Buat banyak orang, itu bedanya antara "bisa dikerjakan" dan "minta upgrade laptop dulu".
Gimana bedanya cara nulis kode?
Ini transformasi yang sama di dua library. pandas dulu.
import pandas as pd
df = pd.read_csv("transaksi.csv")
df = df[df["tanggal"] >= "2025-01-01"]
hasil = (
df.groupby(["cabang", "kategori"])
.agg(omzet=("total", "sum"), rata=("total", "mean"))
.reset_index()
.sort_values("omzet", ascending=False)
)
Sekarang Polars, versi lazy.
import polars as pl
hasil = (
pl.scan_csv("transaksi.csv")
.filter(pl.col("tanggal") >= pl.date(2025, 1, 1))
.group_by(["cabang", "kategori"])
.agg(
pl.col("total").sum().alias("omzet"),
pl.col("total").mean().alias("rata"),
)
.sort("omzet", descending=True)
.collect()
)
Perhatikan scan_csv di baris pertama. Itu gak baca file apa pun.
Polars baru bergerak saat collect() dipanggil. Di titik itu dia udah tahu kamu cuma butuh 4 kolom, jadi 31 kolom sisanya dilewati.
Bedanya juga terasa di gaya penulisan. pandas pakai kurung siku dan mask, Polars pakai ekspresi pl.col() yang bisa dirangkai. Sekali terbiasa, kode Polars biasanya lebih gampang dibaca ulang tiga bulan kemudian.
Kapan kamu perlu pindah ke Polars?
Empat sinyal yang menurutku cukup jelas.
- Script kamu rutin makan lebih dari satu menit. Kalau tiap pagi kamu nunggu 3 menit sambil buka HP, itu 60 menit hilang per bulan.
- Kamu pernah kena MemoryError. Ini alasan paling kuat. Polars sering bisa menyelesaikan pekerjaan yang bikin pandas menyerah di mesin yang sama.
- File sumbernya CSV atau Parquet berukuran ratusan MB ke atas. Di sinilah lazy mode dan scan bekerja paling jauh.
- Pipeline-nya jalan otomatis tiap hari. Proses ETL yang jalan 365 kali setahun layak dioptimasi. Analisis sekali pakai gak.
Kapan kamu gak perlu pindah?
Ini bagian yang jarang ditulis orang.
Data kamu di bawah 1 juta baris. Selisihnya sering cuma 2 detik lawan 0,4 detik. Gak ada yang berubah dalam hidup kamu.
Kamu banyak pakai library yang minta pandas DataFrame. scikit-learn, statsmodels, dan sebagian besar tool visualisasi masih bicara pandas. Konversi bolak-balik bikin keuntungan kecepatannya balik lagi.
Kamu kerja bareng tim yang semuanya pakai pandas. Kode yang cuma kamu yang bisa baca itu risiko, bukan kemajuan.
Pekerjaan kamu mayoritas file Excel kecil. Kalau sehari-hari kamu ngolah rekap 5.000 baris dari cabang, kemungkinan besar yang kamu butuh bukan Polars. Kadang SUMIFS di spreadsheet udah selesai lebih cepat daripada waktu kamu buka Jupyter.
Kamu masih belajar dasar analisis data. Tutorial pandas jumlahnya berkali lipat. Belajar konsep dulu, ganti tool nanti.
Contoh kasus: pipeline harian toko_berkah
toko_berkah punya proses rekap harian yang narik data POS dari 3 cabang, gabungin sama master produk, hitung margin per kategori, lalu kirim hasilnya ke Google Sheets buat dashboard.
Versi pandas jalan 4 menit 12 detik dan pernah gagal 6 kali dalam sebulan gara-gara kehabisan memori di hari-hari ramai.
Aku pindahin dua tahap paling berat ke Polars: pembacaan file POS dan agregasi per kategori. Sisanya tetap pandas, termasuk bagian yang nulis ke Google Sheets.
Hasilnya 51 detik dan nol kegagalan dalam 90 hari berikutnya.
Yang menarik: total kode yang aku ubah cuma 34 baris dari 280 baris script. Dua tahap itu yang makan 88% waktu eksekusi.
Ini pola yang kepakai di hampir semua pipeline. Kamu gak perlu nulis ulang semuanya. Cari dua atau tiga tahap paling lambat, pindahin itu doang.
Kesalahan umum saat pindah ke Polars
Nulis ulang semua script sekaligus. Ini cara paling cepat bikin proyek mandek. Pindahin per tahap, uji hasilnya cocok, baru lanjut.
Gak ngecek hasil angkanya sama. Polars nangani nilai kosong dengan aturan yang agak beda dari pandas. Rata-rata kolom yang punya null bisa beda hasilnya. Bandingkan output lama dan baru sebelum ganti permanen.
Pakai eager mode terus. Kalau kamu cuma ganti pd.read_csv jadi pl.read_csv, kamu cuma dapat sebagian kecil manfaatnya. scan_csv plus collect() itu yang bikin beda.
Maksa pakai apply(). Kebiasaan dari pandas ini bikin Polars kehilangan keunggulan paralelnya. Cari padanan ekspresinya dulu, hampir selalu ada.
Lupa tipe data lebih ketat. Kolom yang di pandas otomatis jadi object, di Polars bakal protes. Ini sebenernya bagus buat data quality, tapi hari pertama bikin kesal.
FAQ
Apakah Polars bakal gantiin pandas?
Kayaknya nggak dalam waktu dekat. pandas udah jadi standar di ribuan library lain, dari scikit-learn sampai matplotlib, dan hampir semua tutorial pakai pandas. Polars lebih pas dipakai berdampingan: pakai Polars buat tahap berat seperti baca file besar dan agregasi, lalu ubah hasil akhirnya ke pandas kalau library berikutnya butuh format itu.
Berapa besar data yang bikin pindah ke Polars masuk akal?
Patokan kasarnya di sekitar 1 juta baris atau file di atas 500 MB. Di bawah itu, selisih waktunya sering cuma beberapa detik. Ukuran bukan satu-satunya sinyal. Kalau script kamu sering kena MemoryError atau laptop nge-hang saat groupby, itu alasan yang lebih kuat daripada jumlah baris.
Apa itu lazy mode di Polars?
Lazy mode artinya Polars gak langsung nge-eksekusi tiap langkah. Dia nyusun rencana dulu, lihat kolom apa saja yang benar-benar dipakai di akhir, lalu baca seperlunya saat kamu panggil collect(). Efeknya kerasa kalau file kamu punya 40 kolom tapi analisisnya cuma butuh 5. Kolom sisanya gak pernah masuk memori.
Apakah sintaks Polars susah dipelajari kalau udah biasa pandas?
Beda pola pikirnya, bukan beda tingkat kesulitannya. Di pandas kamu sering pakai kurung siku dan boolean mask. Di Polars semua ditulis sebagai ekspresi lewat pl.col(). Hari pertama terasa kaku, tapi setelah nulis lima transformasi biasanya udah hafal polanya. Yang paling bikin bingung biasanya null handling dan tipe data yang lebih ketat.
Bisakah Polars baca file Excel?
Bisa, lewat read_excel(), tapi di balik layar dia tetap pakai engine pihak ketiga seperti calamine atau openpyxl. Kalau pekerjaan kamu mayoritas file .xlsx kecil, keuntungan kecepatannya hampir gak kerasa. Polars paling menang saat sumbernya CSV besar atau Parquet, apalagi dipakai bareng scan_parquet().
Cara mulainya
Dua hal yang perlu kamu pegang.
Pertama, ukur dulu sebelum pindah. Catat berapa detik script kamu jalan sekarang dan berapa RAM yang dipakai. Tanpa angka itu, kamu gak akan tahu pindahnya berhasil atau cuma bikin sibuk.
Kedua, pindahin tahap paling lambat saja. Sisanya biarkan di pandas sampai ada alasan jelas.
Minggu ini coba satu hal: jalanin script paling lambat kamu, catat waktunya, lalu tulis ulang cuma bagian baca file pakai pl.scan_csv(). Lihat selisihnya.
Kalau kamu lagi mikirin kapan analisis pindah dari spreadsheet ke Python, baca juga perbandingan Excel vs Python untuk analis.
Mau praktek langsung? Mulai latihan SQL gratis
Latihan interaktif, langsung di browser.
Artikel terkait
Pandas groupby: Agregasi Data ala Pivot di Python (2026)
groupby ngelompokin baris berdasarkan kolom, lalu ngitung ringkasan per grup kayak total atau rata-rata. Ini pivot-nya pandas.
Pandas to_excel: Ekspor DataFrame ke Excel (2026)
to_excel nyimpen DataFrame pandas jadi file Excel .xlsx. Ini cara pakainya, dari satu sheet sampai banyak sheet, plus setelan yang bikin hasilnya rapi.
Pandas read_excel: Baca File Excel di Python
pandas read_excel baca file Excel jadi DataFrame, bisa pilih sheet tertentu dan lompatin baris judul yang berantakan. Ini cara pakai plus parameter penting dengan contoh data toko.