TL;DR
Method to_excel di pandas nyimpen DataFrame jadi file Excel dengan perintah df.to_excel('nama.xlsx', index=False). Kamu butuh library openpyxl kepasang. Buat nulis beberapa DataFrame ke sheet berbeda dalam satu file, pakai pd.ExcelWriter sebagai konteks.
Method to_excel di pandas nyimpen DataFrame jadi file Excel .xlsx cuma dengan satu baris: df.to_excel('laporan.xlsx', index=False).
Ini langkah terakhir yang paling sering kepake. Kamu udah olah data di Python, terus bosnya minta hasilnya dalam Excel biar gampang dibuka orang non-teknis.
Di artikel ini kamu bakal belajar cara ekspor satu sheet, ngatur nama sheet, nulis banyak DataFrame ke satu file, plus error umum yang bikin script gagal jalan.
to_excel adalah method bawaan DataFrame yang nulis isinya ke file Excel. Kamu tinggal kasih nama file, dan pandas ngurus sisanya. Method ini pasangan dari read_excel yang tugasnya baca file Excel ke Python.
Satu hal yang perlu disiapin: pandas butuh library openpyxl buat nulis format .xlsx. Kalau belum ada, pasang dulu.
pip install openpyxl
Bentuk paling dasar cuma butuh nama file. Anggap kamu punya DataFrame bernama df berisi data penjualan.
import pandas as pd
df = pd.DataFrame({
'produk': ['Beras 5kg', 'Minyak 2L', 'Gula 1kg'],
'terjual': [120, 85, 143]
})
df.to_excel('penjualan.xlsx', index=False)
Setelah dijalanin, muncul file penjualan.xlsx di folder yang sama dengan script kamu. Isinya persis kolom produk dan terjual.
Perhatiin argumen index=False. Tanpa itu, pandas ikut nulis kolom index (0, 1, 2) di paling kiri. Di laporan final, kolom itu biasanya cuma bikin berantakan, jadi mending dimatiin.
Secara default, pandas namain sheet-nya 'Sheet1'. Kalau kamu mau nama yang lebih jelas, pakai argumen sheet_name.
df.to_excel('penjualan.xlsx', sheet_name='Juli 2026', index=False)
Sekarang tab sheet-nya bertuliske 'Juli 2026'. Sepele, tapi bikin file kamu keliatan lebih niat waktu dibuka orang lain.
Ini kebutuhan yang sering muncul: satu workbook, beberapa sheet. Misalnya sheet data mentah dan sheet ringkasan. Caranya pakai pd.ExcelWriter sebagai context manager.
ringkasan = df.groupby('produk')['terjual'].sum().reset_index()
with pd.ExcelWriter('laporan_lengkap.xlsx') as writer:
df.to_excel(writer, sheet_name='Data Mentah', index=False)
ringkasan.to_excel(writer, sheet_name='Ringkasan', index=False)
Blok with ngebuka writer sekali, terus dua DataFrame ditulis ke sheet berbeda dalam file yang sama. Begitu blok selesai, file otomatis ke-save dan ketutup dengan bener.
Anggap kamu ngolah data transaksi toko_berkah, UMKM sembako di Bandung. Ada 3.400 baris transaksi Juli yang udah kamu bersihin di pandas. Pemilik toko minta dua hal dalam satu file Excel: rincian transaksi dan ringkasan per kategori.
with pd.ExcelWriter('toko_berkah_juli.xlsx') as writer:
transaksi.to_excel(writer, sheet_name='Transaksi', index=False)
per_kategori = transaksi.groupby('kategori')['nominal'].sum().reset_index()
per_kategori.to_excel(writer, sheet_name='Per Kategori', index=False)
Dari sampel data ngulikdata, sheet ringkasan nunjukin kategori sembako pokok nyumbang Rp 71.500.000 dari total, alias sekitar 62 persen omzet bulan itu. Angka kayak gini yang bikin pemilik toko langsung ngerti sheet mana yang perlu dilihat duluan.
Buat baca file Excel balik ke Python, alurnya kebalik dan bisa kamu pelajari di panduan pandas read_excel.
Lupa install openpyxl. Error 'No module named openpyxl' itu paling sering muncul. Jalanin pip install openpyxl dan beres.
File lagi kebuka di Excel. Kalau file target lagi kamu buka di aplikasi Excel, pandas nggak bisa nimpa dan bakal error permission. Tutup dulu filenya sebelum jalanin script.
Lupa reset_index setelah groupby. Hasil groupby nyimpen kolom pengelompok sebagai index. Kalau nggak di-reset_index, hasil Excel kamu bakal keliatan aneh. Detail semua argumen to_excel ada di dokumentasi resmi pandas.
Pertanyaan yang sering muncul soal ekspor DataFrame ke Excel.
Pandas butuh library terpisah buat nulis file .xlsx, namanya openpyxl, dan itu nggak otomatis kepasang. Jalanin pip install openpyxl di terminal, lalu ulang script kamu. Kalau kamu pakai format .xls jadul, engine-nya beda lagi, tapi buat kebanyakan kebutuhan sekarang cukup openpyxl aja.
Tambah argumen index=False waktu manggil to_excel. Jadi df.to_excel('hasil.xlsx', index=False). Tanpa itu, pandas ikut nulis kolom index (0, 1, 2, dan seterusnya) di paling kiri, yang biasanya nggak kamu butuhin di laporan final. Ini setelan yang paling sering kelupaan.
Bisa, pakai pd.ExcelWriter sebagai context manager. Buka writer sekali, terus panggil to_excel beberapa kali dengan sheet_name berbeda sambil ngarah ke writer yang sama. Semua sheet bakal masuk ke satu file. Ini berguna buat misahin data mentah, ringkasan, dan grafik dalam satu workbook.
Ya, secara default to_excel nimpa file dengan nama sama tanpa nanya konfirmasi. Jadi hati-hati kalau nama filenya sama dengan file penting. Kalau kamu mau nambah sheet ke file yang udah ada tanpa hapus isinya, pakai ExcelWriter dengan mode='a' dan pastiin engine-nya openpyxl.
Itu murni soal format tampilan Excel, bukan datanya rusak. Nilai aslinya tetap utuh di dalam sel. Kalau kamu mau kontrol format angka langsung dari pandas, kamu perlu pakai library kayak XlsxWriter yang ngasih akses ke format sel. Buat kebutuhan cepat, format ulang aja di Excel setelah file kebuka.
Ekspor ke Excel intinya dua hal: pasang openpyxl, terus panggil to_excel dengan index=False. Kalau butuh lebih dari satu sheet, bungkus pakai ExcelWriter dan kamu bebas nulis DataFrame sebanyak yang kamu mau ke satu file.
Mau lengkapin alurnya? Pelajari pandas read_csv buat masukin data dari CSV, atau pandas groupby buat bikin ringkasan sebelum diekspor.
Pengin lancar olah data dari mentah sampai laporan siap kirim? Kulik studi kasus data Indonesia di NgulikData biar kamu terbiasa sama alur kerja analis beneran.
Mau praktek langsung? Mulai latihan SQL gratis
Latihan interaktif, langsung di browser.
Nama toko ketik campur huruf besar-kecil, spasi nyasar di ujung, atau kode produk nempel jadi satu. Accessor .str di pandas ngerapiin semua itu tanpa loop.
Model machine learning cuma ngerti angka, bukan teks kayak merah atau biru. get_dummies ngubah kolom kategori jadi kolom 0/1 dalam satu baris kode.
Cara pakai pandas crosstab buat bikin tabel silang yang menghitung frekuensi antar dua kategori. Contoh analisis kategori produk per kota UMKM.