Cara Menghemat Memori DataFrame Pandas (Turun Sampai 70%)
Blog/Tips & Trik/Cara Menghemat Memori DataFrame Pandas (Turun Sampai 70%)

Cara Menghemat Memori DataFrame Pandas (Turun Sampai 70%)

BimaBima
·20 September 2026·10 menit baca

Penulis

Bima

Bima

Founder & Data Professional

Bagikan

TL;DR

Cara paling ampuh menghemat memori DataFrame Pandas ada tiga: downcast kolom angka dari int64 ke tipe yang lebih kecil kayak int8 atau int16, ubah kolom teks berulang jadi tipe category, dan baca file dengan tipe data yang tepat sejak awal lewat parameter dtype di read_csv. Kombinasi ini rutin nurunin ukuran DataFrame 50 sampai 70 persen tanpa ngubah isinya. Langkah pertama selalu cek dulu pemakaian memori pakai df.info(memory_usage='deep') biar tahu kolom mana yang paling rakus.

Cara paling ampuh menghemat memori DataFrame Pandas ada tiga: downcast kolom angka ke tipe yang lebih kecil, ubah kolom teks berulang jadi category, dan set tipe data yang tepat sejak baca file. Kombinasi ketiganya rutin nurunin ukuran 50 sampai 70 persen.

DataFrame yang bikin laptop lemot atau muncul MemoryError biasanya bukan karena datanya kegedean. Sering karena Pandas milih tipe data yang boros secara default. Kolom umur disimpan pakai int64 yang muat sampai triliunan, kolom kota disimpan sebagai string berulang.

Di bawah ini langkahnya dari cek memori sampai baca file besar dengan hemat, plus satu kasus nyata nurunin file 780 MB jadi 210 MB.

Gimana cara cek pemakaian memori DataFrame?

Sebelum ngoptimasi, kamu harus tahu kolom mana yang paling rakus. Pandas punya dua cara ngecek, dan yang penting pakai argumen deep biar hitungannya akurat buat kolom teks.

import pandas as pd

df = pd.read_csv("penjualan_umkm.csv")

# Total memori plus tipe tiap kolom
df.info(memory_usage="deep")

# Angka per kolom dalam byte
print(df.memory_usage(deep=True))

Tanpa deep=True, Pandas cuma ngitung pointer buat kolom teks, bukan isi string-nya. Angkanya jadi keliatan kecil padahal aslinya besar. Selalu pakai deep buat gambaran jujur.

Dari output ini kamu bisa lihat kolom mana yang bertipe int64, float64, atau object. Tiga tipe itu yang paling sering bisa dikecilin. Konsep dasar DataFrame ada di glossary DataFrame.

Gimana cara downcast kolom angka?

Downcast itu ngubah kolom angka ke tipe yang lebih kecil tapi masih cukup nampung nilainya. Kolom yang isinya 0 sampai 100 nggak butuh int64. Diubah ke int8 aja cukup, dan ukurannya jadi seperdelapan.

Ini tabel batas tiap tipe integer biar kamu tahu mana yang aman dipakai.

TipeRentang nilaiUkuran
int8-128 sampai 1271 byte
int16-32.768 sampai 32.7672 byte
int32sekitar 2 miliar4 byte
int64sangat besar8 byte

Cara paling gampang pakai pd.to_numeric dengan argumen downcast. Pandas otomatis milih tipe terkecil yang muat.

# Downcast otomatis ke integer terkecil yang muat
df["umur"] = pd.to_numeric(df["umur"], downcast="integer")

# Downcast kolom desimal ke float lebih kecil
df["harga"] = pd.to_numeric(df["harga"], downcast="float")

Buat float, hati-hati sedikit. Downcast float64 ke float32 ngurangin presisi desimal. Buat data uang atau ilmiah yang butuh presisi tinggi, biarin float64. Detail konversi tipe aku bahas juga di pandas astype.

Kapan pakai tipe category?

Kolom teks yang nilainya berulang dan variasinya sedikit itu kandidat terbaik buat category. Kolom kota, kategori produk, status pesanan. Pandas nyimpen daftar nilai unik sekali, lalu pakai kode angka buat sisanya.

# Cek dulu berapa nilai unik dibanding total baris
print(df["kota"].nunique(), "dari", len(df))

# Kalau nilai uniknya sedikit, ubah jadi category
df["kota"] = df["kota"].astype("category")
df["kategori"] = df["kategori"].astype("category")

Aturan praktisnya: kalau jumlah nilai unik kurang dari sekitar setengah total baris, category biasanya hemat. Kalau nilainya hampir semua unik kayak kolom ID atau email, jangan pakai category, malah lebih boros karena harus nyimpen daftar dan kode sekaligus.

Gimana cara hemat memori waktu baca CSV besar?

Optimasi paling efektif dilakukan sejak baca file, bukan setelah semua data masuk RAM. Ada tiga senjata di read_csv.

Pertama, usecols buat baca cuma kolom yang kamu butuh. Buat apa muat 30 kolom kalau analisismu cuma pakai 5.

# Baca cuma kolom yang dipakai
df = pd.read_csv(
    "penjualan_umkm.csv",
    usecols=["tanggal", "kota", "kategori", "qty", "harga"]
)

Kedua, dtype buat kasih tahu tipe data sejak awal biar Pandas nggak default ke int64 dan object.

# Tentuin tipe data sejak baca
df = pd.read_csv(
    "penjualan_umkm.csv",
    dtype={
        "qty": "int16",
        "kota": "category",
        "kategori": "category",
    },
    parse_dates=["tanggal"]
)

Ketiga, kalau filenya kegedean buat RAM sekaligus, baca bertahap pakai chunksize. Kamu proses per potongan lalu gabung hasilnya. Teknik baca file dasar aku bahas di pandas read_csv dan referensi fungsi read_csv.

# Proses file besar per 100 ribu baris
total_qty = 0
for chunk in pd.read_csv("penjualan_umkm.csv", chunksize=100_000):
    total_qty += chunk["qty"].sum()

print(total_qty)

Contoh kasus: file penjualan UMKM 2 juta baris

Aku pegang file penjualan_umkm.csv berisi 2 juta baris transaksi gabungan dari beberapa toko. Semua angka di bawah dari dataset ngulikdata. Waktu dibaca polos tanpa optimasi, ukurannya di memori 780 MB. Laptop 8 GB langsung berat.

Aku cek pakai info, ketahuan biang borosnya. Kolom kota dan kategori disimpan sebagai object, padahal masing-masing cuma punya belasan nilai unik. Kolom qty pakai int64 padahal isinya di bawah 500.

Setelah aku terapin tiga langkah tadi, hasilnya begini.

LangkahUkuran memoriPenghematan
Baca polos780 MB-
Downcast angka560 MB28%
Kota dan kategori jadi category260 MB67%
Buang kolom nggak kepakai210 MB73%

Dari 780 MB jadi 210 MB, turun 73%. Isinya sama persis, nggak ada baris atau nilai yang hilang. Yang berubah cuma cara Pandas nyimpennya. Setelah itu, operasi groupby yang tadinya bikin kernel mati jadi jalan mulus.

Pelajaran terbesarnya: yang paling hemat bukan downcast angka, tapi ubah kolom teks berulang jadi category. Dua kolom itu doang nyumbang penghematan terbesar.

Kesalahan umum

Downcast tanpa cek batas nilai. Ngubah kolom ke int8 padahal ada nilai di atas 127 bikin data rusak diam-diam. Cek dulu nilai maksimal dan minimal sebelum downcast.

Pakai category buat kolom ID. Kolom yang hampir semua nilainya unik malah lebih boros pakai category. Simpan sebagai string atau angka biasa.

Downcast float uang ke float32. Presisinya berkurang dan hitungan rupiah bisa meleset di desimal. Buat angka uang, biarin float64 atau pakai integer dalam satuan sen.

Optimasi setelah semua data masuk RAM. Kalau filenya udah nggak muat, optimasi setelah baca itu telat. Set dtype dan usecols sejak read_csv.

Lupa deep=True waktu cek memori. Tanpa itu, kolom teks keliatan kecil dan kamu salah nebak kolom mana yang perlu dioptimasi.

FAQ

Gimana cara cek pemakaian memori DataFrame Pandas?

Pakai df.info(memory_usage='deep') buat lihat total dan tipe tiap kolom, atau df.memory_usage(deep=True) buat angka per kolom dalam byte. Argumen deep=True penting buat kolom teks, karena tanpa itu Pandas cuma ngitung pointer, bukan isi string sebenarnya. Dari sini kamu tahu kolom mana yang paling rakus dan layak dioptimasi duluan.

Apa itu downcast di Pandas?

Downcast adalah ngubah kolom angka ke tipe data yang lebih kecil tapi masih cukup nampung nilainya. Kolom umur yang isinya 0 sampai 120 nggak butuh int64 yang muat sampai triliunan. Diubah ke int8 aja cukup, dan ukurannya jadi seperdelapan. Kamu bisa pakai pd.to_numeric dengan argumen downcast, atau astype langsung ke tipe yang kamu tentuin.

Kapan sebaiknya pakai tipe category di Pandas?

Pakai category buat kolom teks yang nilainya berulang-ulang dan variasinya sedikit, kayak kolom kota, kategori produk, atau status. Kalau satu kolom punya 100 ribu baris tapi cuma 5 nilai unik, category nyimpen 5 nilai itu sekali lalu pakai kode angka buat sisanya. Hematnya besar. Tapi jangan pakai buat kolom yang hampir semua nilainya unik kayak ID.

Apakah optimasi memori bikin data saya berubah?

Nggak, selama kamu downcast ke tipe yang masih muat semua nilai. Ngubah int64 jadi int16 aman kalau nilai maksimalnya di bawah batas int16. Yang perlu hati-hati itu float. Downcast float64 ke float32 ngurangin presisi desimal, jadi buat perhitungan uang atau ilmiah yang butuh presisi tinggi, biarin float64. Selalu cek ulang beberapa nilai setelah konversi.

Gimana cara hemat memori waktu baca CSV besar?

Ada tiga trik utama. Pakai parameter usecols buat baca cuma kolom yang kamu butuh. Pakai dtype buat kasih tahu tipe data tiap kolom sejak awal biar Pandas nggak default ke int64 dan object. Kalau filenya kegedean buat RAM, baca bertahap pakai chunksize, proses per potongan, lalu gabung hasilnya. Kombinasi ini bikin file yang tadinya nggak muat jadi bisa diproses.

Penutup

Yang perlu kamu bawa soal hemat memori Pandas:

  • Cek dulu pakai df.info(memory_usage='deep') biar tahu kolom mana yang rakus
  • Downcast angka dan ubah teks berulang jadi category, dua ini yang paling ngefek
  • Set dtype dan usecols sejak read_csv buat file yang gede banget

Coba jalanin info memory di DataFrame kamu sekarang, terus ubah satu kolom teks berulang jadi category. Lihat berapa turunnya. Buat pendalaman tipe data, lanjut ke fungsi astype, dan referensi resmi ada di dokumentasi Pandas soal skala data.

Coba Langsung

Mau praktek langsung? Mulai latihan SQL gratis

Latihan interaktif, langsung di browser.

Buka NgulikSQL →
Bagikan:
Bima
Ditulis oleh

Bima

Founder & Data Professional

Founder Ngulik Data. Passionate about making data analysis accessible for everyone.

Artikel terkait

NumPy reshape: Ubah Bentuk Array (2026)
Tips & Trik
8 Oktober 2026•9 menit baca

NumPy reshape: Ubah Bentuk Array (2026)

Fungsi reshape di NumPy ngatur ulang bentuk array tanpa ngubah datanya. Ini cara pakainya, arti angka -1, dan cara ngeflat array.

BimaBima
NumPy Array: Dasar-Dasar untuk Analis Data (2026)
Tips & Trik
6 Oktober 2026•10 menit baca

NumPy Array: Dasar-Dasar untuk Analis Data (2026)

NumPy array bikin hitungan data di Python jauh lebih cepat dari list biasa. Ini dasar bikin, slicing, dan operasi array buat analis.

BimaBima
Alternatif iterrows yang Lebih Cepat di Pandas
Tips & Trik
3 Oktober 2026•8 menit baca

Alternatif iterrows yang Lebih Cepat di Pandas

iterrows nyaman ditulis tapi lambat. Ini urutan alternatif iterrows di pandas dari yang tercepat, plus benchmark biar kamu tau kapan pakai yang mana.

BimaBima
Kembali ke Blog
Ngulik Data logoNgulik Data

Platform edukasi data lengkap untuk professionals Indonesia. Belajar SQL, Data Analysis, dan lebih banyak lagi dengan praktek langsung dan feedback real-time.

© 2026 Ngulik Data. Semua hak dilindungi.

TAUTAN
BantuanHargaDatasetBlogAfiliasi
LEGAL
Syarat & KetentuanKebijakan Privasi
Ngulik Data
DatasetLeaderboardBlogStore