Materi
pd.read_excel("berkas.xlsx") membaca satu sheet menjadi DataFrame dengan baris pertama sebagai nama kolom. Untuk .xlsx, pandas memakai openpyxl sebagai mesinnya; argumen engine="openpyxl" menuliskannya terang-terangan. Argumen sheet_name menentukan sheet mana: bawaannya 0, yaitu sheet pertama; teks memilih sheet dengan namanya; dan None membaca semua sheet sekaligus menjadi dict nama sheet → DataFrame.
Dibanding iter_rows, read_excel cocok ketika langkah berikutnya adalah olahan tabel — menyaring, groupby, menggabungkan — yang sudah kamu kenal dari kelas Analisis Data dengan Python. openpyxl tetap dipakai ketika yang diurus adalah bentuk berkasnya: gaya, rumus, posisi sel.
import pandas as pd
semua = pd.read_excel("kehadiran.xlsx", sheet_name=None, engine="openpyxl")
print(list(semua)) # ['Senin', 'Selasa']
bagian = []
for hari, d in semua.items():
bagian.append(d.assign(hari=hari))
gabung = pd.concat(bagian, ignore_index=True)Pola dict + concat menggantikan perulangan sheet di modul 3: setiap DataFrame diberi kolom asal dengan assign, lalu pd.concat menyusunnya menjadi satu tabel. ignore_index=True memberi nomor baris baru yang berurutan.
Pesan error dan kejutan yang akan kamu temui
ValueError: Worksheet named 'Feb' not found berarti nama sheet tidak persis sama. KeyError dengan nama kolom berarti judul kolom di Excel berbeda ejaan atau berspasi; cetak df.columns. Baris kosong di tengah tabel ikut terbaca sebagai baris NaN. Kolom berumus yang ditulis skrip juga terbaca NaN, karena openpyxl tidak menghitung rumus dan nilai tersimpannya belum ada.