Nama kolom hasil ekspor sering kali tidak konsisten: ada singkatan yang sulit dibaca, ada campuran huruf besar dan kecil, ada pula spasi yang menyulitkan penulisan kode. Mengganti nama sebaiknya dilakukan di awal alur kerja agar seluruh kode berikutnya memakai istilah yang seragam. Method rename()
mengganti nama kolom maupun label index tanpa menyentuh isi datanya. Pada Chapter ini kita mempraktikkan rename() dengan dictionary dan dengan fungsi, lalu memeriksa perilakunya terhadap data asli.
Mengganti Nama Kolom dengan Mapping #
Kasus paling umum adalah mengganti sebagian nama kolom. Kita ganti harga menjadi harga_satuan dan jumlah menjadi terjual melalui dictionary yang memasangkan nama lama dengan nama baru. Skrip berikut juga menunjukkan dua variasi penggantian label index.
import pandas as pd
penjualan = pd.DataFrame(
{
"produk": ["Kopi Gayo", "Teh Melati", "Gula Aren", "Roti Bakar", "Pisang Goreng"],
"kasir": ["Budi", "Siti", "Dewi", "Budi", "Dewi"],
"cabang": ["Bandung", "Jakarta", "Bandung", "Surabaya", "Jakarta"],
"harga": [18000, 12000, 15000, 20000, 10000],
"jumlah": [35, 40, 25, 20, 50],
"stok": [12, 8, 30, 15, 22],
},
index=["P001", "P002", "P003", "P004", "P005"],
)
baru = penjualan.rename(columns={"harga": "harga_satuan", "jumlah": "terjual"})
print(list(baru.columns))
print(list(penjualan.columns))
print()
dengan_index = penjualan.rename(index={"P001": "PROD-001", "P002": "PROD-002"})
print(list(dengan_index.index))
print()
huruf_kecil = penjualan.rename(index=str.lower)
print(list(huruf_kecil.index))Output yang Dihasilkan:
['produk', 'kasir', 'cabang', 'harga_satuan', 'terjual', 'stok']
['produk', 'kasir', 'cabang', 'harga', 'jumlah', 'stok']
['PROD-001', 'PROD-002', 'P003', 'P004', 'P005']
['p001', 'p002', 'p003', 'p004', 'p005']Mari kita telaah peran setiap baris kode di atas:
- Baris 15 (
baru = penjualan.rename(columns={...})): dictionary pada argumencolumnsmemetakanhargakeharga_satuandanjumlahketerjual; kolom lain tidak tersentuh. - Baris 16-17:
list(baru.columns)menampilkan nama baru, sedangkanlist(penjualan.columns)masih menampilkan nama lama;rename()mengembalikan DataFrame baru. - Baris 20 (
dengan_index = penjualan.rename(index={...})): argumenindexmemetakan label baris; hanyaP001danP002yang berganti menjadiPROD-001danPROD-002. - Baris 24 (
huruf_kecil = penjualan.rename(index=str.lower)): bila kita memberi fungsi alih-alih dictionary, fungsi tersebut diterapkan pada setiap label;str.lowermenjadikan seluruh label huruf kecil.
Output kedua memperlihatkan penggantian parsial: label P003 sampai P005 tetap seperti semula karena tidak tercantum dalam dictionary. Cara dengan fungsi cocok untuk perubahan seragam, misalnya menjadikan semua label huruf kecil atau semua nama kolom huruf besar melalui str.upper.
Perlu diingat bahwa mengganti nama bukan pekerjaan membangun ulang DataFrame. Membuat DataFrame baru dengan dictionary yang berisi nama kolom berbeda berarti menyalin seluruh data sekali lagi dan berisiko mengubah dtype pada prosesnya. rename() hanya bekerja pada lapisan label, sehingga data, urutan baris, dan tipe setiap kolom tetap persis seperti sebelumnya.
Perilaku rename() yang Perlu Diingat #
rename() tidak pernah mengubah DataFrame asli; method ini selalu mengembalikan DataFrame baru yang berperilaku seperti copy sejak pandas 3.0 menerapkan Copy-on-Write
. Karena itu, simpan hasilnya dengan penugasan seperti penjualan = penjualan.rename(columns={...}) bila hasilnya memang untuk dipakai. Argumen inplace=True masih tersedia, tetapi pola penugasan tetap menjadi kebiasaan yang lebih baik di era pandas 3.0.
Mapping yang memuat nama lama yang tidak ada di data tidak memunculkan galat: secara default rename() memakai errors="ignore" dan mengabaikan pasangan yang tidak cocok. Perilaku longgar ini dapat menyembunyikan salah ketik pada nama kolom. Bila Anda ingin mapping diperiksa ketat, tambahkan errors="raise" sehingga nama yang tidak ditemukan memunculkan KeyError.
Nama kolom dan label index kini rapi dan seragam. Persiapan berikutnya adalah membersihkan baris maupun kolom yang memang tidak dibutuhkan sama sekali. Penghapusan lengkap dengan drop(), parameter axis, dan penanganan label yang tidak ada, kita bahas pada Chapter berikutnya.