Baca File Excel di Python: read_excel, Multi-Sheet, dan Jebakannya
Blog/Tips & Trik/Baca File Excel di Python: read_excel, Multi-Sheet, dan Jebakannya

Baca File Excel di Python: read_excel, Multi-Sheet, dan Jebakannya

BimaBima
·21 September 2025·11 menit baca

Penulis

Bima

Bima

Founder & Data Professional

Bagikan

TL;DR

File Excel dibaca di Python pakai fungsi pandas.read_excel, yang butuh library openpyxl buat format .xlsx. Buat file dengan banyak sheet, isi parameter sheet_name dengan nama sheet, daftar nama, atau None supaya semua sheet kebaca sekaligus jadi dictionary. Jebakan yang paling sering muncul: kode nol di depan hilang, sel gabungan jadi kosong, dan tanggal kebaca sebagai angka, dan ketiganya bisa dicegah lewat parameter dtype dan converters.

File Excel dibaca di Python pakai satu fungsi: pandas.read_excel.

Satu baris kode, selesai. Masalahnya bukan di situ. Masalahnya file Excel yang beredar di kantor Indonesia jarang rapi.

Ada judul laporan tiga baris di atas header. Ada sel gabungan. Ada kode produk yang diawali nol. Ada kolom tanggal yang isinya campur teks dan angka.

Semua itu bikin read_excel ngasih hasil yang keliatan benar tapi angkanya meleset. Di bawah ini cara bacanya dengan benar, plus enam jebakan yang paling sering nyusahin.

Gimana cara baca file Excel di Python?

Install pandas dan openpyxl, lalu panggil pd.read_excel dengan path filenya. pandas nggak bisa buka file Excel sendirian, dia butuh library pembaca terpisah. Buat format .xlsx mesinnya openpyxl, buat format lama .xls mesinnya xlrd.

pip install pandas openpyxl
import pandas as pd

df = pd.read_excel("penjualan_toko_berkah.xlsx")
print(df.shape)
print(df.head())

Kalau muncul pesan error yang nyebut openpyxl, artinya library-nya belum terpasang. Install dulu di dalam virtual environment proyekmu.

Gimana cara baca file Excel yang punya banyak sheet?

Isi parameter sheet_name. Nilainya bisa nama sheet, nomor urut sheet, daftar beberapa sheet, atau None buat baca semuanya. Kalau isinya daftar atau None, hasilnya berupa dictionary dengan nama sheet sebagai kunci, bukan DataFrame tunggal.

# Satu sheet berdasarkan nama
df = pd.read_excel("laporan.xlsx", sheet_name="Januari")

# Sheet kedua berdasarkan posisi (mulai dari 0)
df = pd.read_excel("laporan.xlsx", sheet_name=1)

# Beberapa sheet sekaligus
sheets = pd.read_excel("laporan.xlsx", sheet_name=["Januari", "Februari"])
print(sheets["Februari"].head())

# Semua sheet
semua = pd.read_excel("laporan.xlsx", sheet_name=None)
print(list(semua.keys()))

Buat gabungin semua sheet jadi satu tabel, pakai pd.concat sambil nyimpen nama sheet-nya jadi kolom baru:

gabungan = pd.concat(
    [df.assign(bulan=nama) for nama, df in semua.items()],
    ignore_index=True,
)
print(gabungan["bulan"].value_counts())

Kolom bulan itu penyelamat. Tanpa itu, begitu digabung kamu nggak bisa lagi tau baris mana datang dari sheet mana.

Gimana cara lihat daftar sheet tanpa baca isinya?

Pakai pd.ExcelFile. Objek ini buka filenya sekali, jadi kamu bisa intip nama sheet lalu ambil yang kamu butuh tanpa mengurai ulang seluruh file.

xl = pd.ExcelFile("laporan.xlsx")
print(xl.sheet_names)
# ['Ringkasan', 'Januari', 'Februari', 'Maret', 'Catatan']

df = xl.parse("Februari")

Buat file besar yang kamu baca berkali-kali, cara ini jauh lebih cepat dari manggil read_excel berulang.

Parameter read_excel yang paling sering kepakai

ParameterFungsiContoh
sheet_namePilih sheetsheet_name="Januari"
skiprowsLewati baris judul di atas headerskiprows=3
headerBaris mana yang jadi nama kolomheader=2
usecolsAmbil kolom tertentu sajausecols="A:F"
dtypePaksa tipe data kolomdtype={"kode": str}
na_valuesNilai yang dianggap kosongna_values=["-", "n/a"]
nrowsBatasi jumlah barisnrows=100
parse_datesUbah kolom jadi tanggalparse_dates=["tanggal"]

Daftar lengkapnya ada di dokumentasi resmi pandas.read_excel.

Apa saja jebakan waktu baca Excel di Python?

1. Kode nol di depan hilang

Kode produk 007 kebaca jadi 7. NIK yang diawali nol ikut kepotong. Ini jebakan yang paling mahal, soalnya hasil join-nya bakal kosong tanpa pesan error.

df = pd.read_excel("produk.xlsx", dtype={"kode_produk": str, "nik": str})

2. Judul laporan bikin header berantakan

Kalau baris 1 sampai 3 isinya judul dan tanggal cetak, pandas bakal ngira baris 1 itu nama kolom. Hasilnya kolom bernama Unnamed: 0 di mana-mana.

df = pd.read_excel("laporan.xlsx", skiprows=3)
print(df.columns.tolist())

3. Sel gabungan jadi nilai kosong

Sel gabungan di Excel cuma nyimpen nilai di sel kiri atas. Sisanya kosong. Di pandas, itu jadi NaN yang menyebar ke bawah.

df["cabang"] = df["cabang"].ffill()

Perintah ffill nyalin nilai terakhir yang ada ke baris kosong di bawahnya. Cek dulu hasilnya, soalnya cara ini salah kalau kekosongannya beneran berarti nol.

4. Angka kebaca sebagai teks

Kolom yang isinya "1.250.000" dengan titik pemisah ribuan bakal kebaca sebagai teks. Hitungan apa pun di kolom itu bakal error atau hasilnya aneh.

df["omzet"] = (
    df["omzet"].astype(str)
    .str.replace(".", "", regex=False)
    .str.replace(",", ".", regex=False)
)
df["omzet"] = pd.to_numeric(df["omzet"], errors="coerce")
print(df["omzet"].isna().sum())

Baris terakhir wajib. Itu ngasih tau berapa nilai yang gagal dikonversi dan berubah jadi kosong.

5. Tanggal jadi angka lima digit

Excel nyimpan tanggal sebagai angka hari sejak 1899. Kalau formatnya kacau, kamu bakal lihat angka 45678 di kolom tanggal.

df["tanggal"] = pd.to_datetime(
    df["tanggal_serial"], unit="D", origin="1899-12-30"
)

Angka 1899-12-30 itu bukan salah ketik. Excel nganggap tahun 1900 punya 29 Februari, padahal nggak, jadi titik awalnya digeser sehari.

6. Rumus kebaca kosong

pandas baca hasil hitungan terakhir yang tersimpan di file, bukan teks rumusnya. Kalau file dibikin oleh sistem lain yang nggak nyimpen hasil hitungan, sel berumus kebaca kosong. Solusinya buka file itu di Excel lalu simpan ulang.

Contoh kasus: 1.847 baris yang nyaris raib

Aku pernah gabungin 12 sheet laporan bulanan toko_berkah jadi satu tabel. Total baris di file aslinya 14.302.

Setelah digabung dan di-join sama tabel master produk, yang cocok cuma 12.455 baris. Ada 1.847 baris yang nggak nemu pasangan, sekitar 12,9 persen dari total.

Penyebabnya kode produk. Di file master, kode disimpan sebagai teks dengan format lima digit kayak "00841". Di file transaksi, kolom yang sama kebaca sebagai angka jadi "841".

Perbaikannya satu parameter:

trx = pd.read_excel("transaksi.xlsx", sheet_name=None,
                    dtype={"kode_produk": str})
master = pd.read_excel("master.xlsx", dtype={"kode_produk": str})

Setelah itu semua 14.302 baris cocok. Kalau aku nggak ngecek jumlah baris sebelum dan sesudah join, laporan omzet bulan itu bakal kurang sekitar Rp 214 juta tanpa ada yang sadar.

Kebiasaan yang aku pasang sejak itu: selalu cetak df.shape sebelum dan sesudah setiap operasi gabung.

Checklist setelah baca file Excel

  1. Cek jumlah baris dan kolom pakai df.shape, bandingkan dengan yang kelihatan di Excel.
  2. Cek tipe data tiap kolom pakai df.dtypes. Kolom kode harus object, kolom uang harus angka.
  3. Hitung nilai kosong per kolom pakai df.isna().sum().
  4. Cek nilai unik di kolom kategori pakai value_counts(). Di situ ketahuan kalau ada "Depok" dan "depok" yang dianggap beda.
  5. Lihat 5 baris terakhir pakai df.tail(). Baris total di ujung laporan sering kebawa jadi data.

Kalau langkah pembersihannya lebih cepat dikerjakan di spreadsheet, fungsi kayak TEXT buat jaga format kode dan IFERROR buat nutup nilai error bisa dipakai sebelum filenya dibaca Python. Pengecekan data quality di awal selalu lebih murah dari nambal di akhir.

FAQ

Kenapa muncul error soal openpyxl?

Karena pandas butuh library terpisah buat baca Excel, dan openpyxl nggak terpasang otomatis. Jalankan pip install openpyxl. Buat format lama .xls, install xlrd.

Gimana cara baca semua sheet sekaligus?

Isi sheet_name dengan None. Hasilnya dictionary dengan nama sheet sebagai kunci. Gabungkan pakai pd.concat kalau strukturnya sama.

Kenapa kode produk yang diawali nol jadi hilang?

Karena pandas nebak kolom itu angka, dan 007 sama dengan 7. Cegah pakai dtype={"kode_produk": str} waktu baca filenya.

Rumus Excel kebaca sebagai apa?

Sebagai hasil hitungan terakhir yang tersimpan di file, bukan teks rumusnya. Kalau file dibikin sistem lain yang nggak nyimpen hasil, selnya kebaca kosong.

Baca Excel lambat, gimana mempercepatnya?

Buka sekali pakai pd.ExcelFile lalu ambil sheet dari objek itu. Batasi kolom lewat usecols. Buat file di atas 50 MB, ubah sekali jadi Parquet atau CSV.

Langkah berikutnya

Tiga kebiasaan yang nyelametin paling banyak waktu: sebut dtype buat semua kolom kode, cek shape sebelum dan sesudah join, dan lihat tail() buat nangkap baris total yang kebawa.

Setelah datamu bersih, lanjut ke visualisasi lewat 10 plot Seaborn yang paling kepakai atau tutorial Matplotlib bahasa Indonesia.

Ambil satu file Excel dari kerjaanmu sekarang, baca pakai read_excel, lalu jalankan lima langkah checklist di atas. Kalau ada satu yang mengagetkan, berarti checklist-nya sudah bekerja.

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

Pandas groupby: Agregasi Data ala Pivot di Python (2026)
Tips & Trik
20 Juli 2026•9 menit baca

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.

BimaBima
Pandas to_excel: Ekspor DataFrame ke Excel (2026)
Tips & Trik
18 Juli 2026•8 menit baca

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.

BimaBima
Pandas read_excel: Baca File Excel di Python
Tips & Trik
16 Juli 2026•8 menit baca

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.

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