Lewati ke konten utama

Mengganti Nama Kolom di Pandas: Panduan Lengkap dengan Contoh

Pelajari cara mengganti nama kolom di pandas dengan .rename(), df.columns, dan .set_axis(), plus fungsi Python untuk snake_case serta perbaikan untuk KeyError dan ValueError.
Diperbarui 17 Agu 2026  · 13 mnt baca

Jelajahi dengan AI

ChatGPTClaudePerplexity

Anda menarik CSV baru dari database perusahaan, menjalankan df.head(), dan melihat CUST_ID_NBR, txn_amt_usd_2, Unnamed: 7, atau kolom bernama Customer Name (Full) dengan spasi di akhir yang tidak Anda sadari sampai sebuah KeyError merusak sore Anda. Nama kolom yang berantakan adalah salah satu gesekan kecil dalam pekerjaan data nyata, dan langkah pandas rename column biasanya menjadi hal pertama yang Anda lakukan sebelum analisis sebenarnya dimulai.

Dalam tutorial cara mengganti nama kolom di pandas ini, Anda akan mempelajari:

  • mengganti nama satu atau banyak kolom dengan .rename()

  • mengganti semua nama kolom sekaligus dengan df.columns atau .set_axis()

  • menerapkan fungsi untuk mentransformasi nama secara massal

  • membersihkan nama yang berantakan dengan aksesori .str

  • mengganti nama kolom saat memuat data di pd.read_csv()

  • menangani tugas yang sama di Polars

  • menghindari KeyError dan ValueError: Length mismatch

Tutorial ini mengasumsikan Anda bisa mengimpor pandas dan membuat DataFrame. Kita akan menggunakan dataset realistis sepanjang pembahasan, seperti catatan pelanggan, ekspor penjualan, dan pembacaan sensor, sehingga polanya langsung selaras dengan jenis data yang benar-benar Anda kerjakan.

Metode Pandas Rename Mana yang Harus Anda Pilih?

Pilih metode yang sesuai dengan cakupan tugas Anda: penggantian nama terarah, penggantian penuh, atau aturan yang diterapkan ke setiap nama.

Tujuan Anda

Metode

Kapan cocok

Ganti nama satu atau beberapa kolom spesifik

df.rename(columns={"old": "new"})

Kolom lain dibiarkan apa adanya; aman di dalam rantai method

Ganti setiap nama kolom

df.columns = [...] atau df.set_axis([...], axis=1)

Lebih cepat daripada memetakan setiap nama; gunakan .set_axis() saat Anda perlu chaining

Ganti nama berdasarkan aturan (lowercase, snake_case, strip)

df.rename(columns=func) atau df.columns.str....

Ekspresikan aturannya sekali alih-alih mendaftarkan setiap kolom

Ganti nama saat memuat

pd.read_csv(..., header=0, names=[...])

Anda mengendalikan skema dan tidak ingin langkah terpisah

Salah satu di atas di Polars

df.rename({"old": "new"}), .alias() di dalam select

Immutable dan chain-first, jadi tidak ada inplace

Bagaimana Cara Mengganti Nama Kolom dengan .rename()?

Method .rename() adalah cara paling fleksibel untuk melakukan operasi pandas DataFrame rename column, dan ini yang paling sering Anda gunakan. 

Method ini menerima dictionary yang memetakan nama lama ke nama baru, membiarkan kolom yang tidak disebutkan tetap tak berubah, dan secara default mengembalikan DataFrame baru alih-alih memodifikasi yang asli. Ini membuat .rename() aman digunakan di dalam rantai method dan mudah dipahami saat debugging.

Pola dictionary terlihat seperti ini:

sales_data.rename(columns={"old_name": "new_name"})

Jika Anda baru dengan dictionary, saya sarankan meninjau tutorial method dictionary Python kami sebagai penyegar.

Catatan tentang parameter copy lama

Satu catatan cepat sebelum contoh. Pandas 3.0 menandai copy sebagai deprecated dan menjadikan Copy-on-Write sebagai perilaku default. Dalam praktiknya, ini berarti Anda tidak perlu lagi khawatir apakah .rename() membuat salinan data yang mahal. Pandas menanganinya secara lazy di balik layar. Parameter utama yang tersisa untuk dipikirkan adalah inplace, yang akan kita bahas di subbagian ketiga.

Mengganti nama satu kolom

Bayangkan Anda baru saja memuat catatan pelanggan yang diekspor dari CRM lama. Nama kolom disingkat dengan cara yang masuk akal bagi perancang database pada 2008, tetapi tidak bagi Anda. Ini adalah operasi pandas rename column paling sederhana: satu nama lama, satu nama baru, dalam dictionary:

import pandas as pd

customers = pd.DataFrame({
    "cust_id_nbr": [4521, 4522, 4523, 4524],
    "first_nm": ["Abe", "Rick", "Pat", "Kim"],
    "signup_dt": ["2008-03-12", "2008-03-15", "2008-03-18", "2008-03-21"]
})

print(customers)

Python DataFrame

Sekarang, ganti nama cust_id_nbr menjadi sesuatu yang lebih mudah dibaca:

customers_renamed = customers.rename(columns={"cust_id_nbr": "customer_id"})
print(customers_renamed)

Python DataFrame

DataFrame customers asli tidak berubah. .rename() mengembalikan DataFrame baru, yang kita tetapkan ke customers_renamed. Dua kolom yang tidak kita sebut (first_nm, signup_dt) ikut serta tanpa perubahan.

Mengganti nama beberapa kolom

Dictionary berskala secara alami. Untuk menangani tugas pandas rename multiple columns, cukup tambahkan lebih banyak pasangan key-value ke pemetaan:

customers_clean = customers.rename(columns={
    "cust_id_nbr": "customer_id",
    "first_nm": "first_name",
    "signup_dt": "signup_date"
})

print(customers_clean)

Python DataFrame

Ada juga sintaks alternatif yang menggunakan argumen mapper dan axis alih-alih keyword columns:

customers.rename(mapper={"cust_id_nbr": "customer_id"}, axis=1)

axis=1 memberi tahu pandas bahwa Anda menargetkan kolom (berbeda dengan axis=0 untuk label indeks baris). Keduanya menghasilkan hasil yang sama. Sebagian besar kode di alam liar menggunakan columns={...} karena lebih mudah dibaca sekilas, jadi kita akan tetap menggunakan pola itu untuk sisa tutorial.

Satu detail berguna adalah jika Anda memberikan key yang tidak cocok dengan kolom mana pun yang ada, .rename() secara default mengabaikannya secara senyap. Itu nyaman saat Anda menulis fungsi yang dapat digunakan ulang yang mungkin menangani DataFrame dengan skema yang sedikit berbeda, tetapi juga bisa menyembunyikan salah ketik. Untuk membuat pandas melempar error pada nama kolom yang tidak dikenal, berikan errors='raise'.

Menggunakan inplace vs. mengembalikan DataFrame baru

Secara default, .rename() mengembalikan DataFrame baru dan membiarkan yang asli tetap. Jika Anda ingin memodifikasi DataFrame yang ada secara langsung, berikan inplace=True:

# Mengembalikan DataFrame baru (default)
customers_v2 = customers.rename(columns={"first_nm": "first_name"})

# Memodifikasi customers secara langsung, mengembalikan None
customers.rename(columns={"first_nm": "first_name"}, inplace=True)

print(customers)

Python DataFrame

Jadi mana yang harus Anda gunakan? Dalam kebanyakan kasus, default yang mengembalikan DataFrame baru adalah pilihan yang lebih baik. Ini juga lebih mudah untuk debug, karena Anda masih memiliki DataFrame asli untuk diperiksa saat sesuatu salah. Dan ini menghindari masalah aliasing yang menghasilkan SettingWithCopyWarning pada kode lama.

Kinerja juga bukan alasan untuk lebih memilih inplace lagi. Dengan Copy-on-Write, yang kini menjadi default di pandas 3.0+, versi non-inplace menggunakan penyalinan lazy. Data Anda tidak benar-benar diduplikasi sampai sesuatu dimodifikasi. Argumen lama bahwa inplace=True menghemat memori kini jauh lebih lemah.

Satu tempat di mana inplace=True masih terasa natural adalah dalam skrip eksploratif singkat di mana Anda membersihkan satu DataFrame selangkah demi selangkah dan tidak peduli tentang chaining. Untuk kode produksi atau apa pun yang akan Anda kunjungi lagi nanti, lebih baik pilih default.

Bagaimana Cara Mengganti Semua Nama Kolom Sekaligus di Pandas?

Terkadang Anda tidak ingin memetakan nama lama ke nama baru. Anda hanya ingin mengganti setiap nama kolom sekaligus. Ini lebih sering muncul daripada yang Anda kira, seperti CSV tanpa header di mana pandas menetapkan 0, 1, 2 sebagai nama kolom, dataset di mana baris header dalam bahasa lain, atau ekspor sistem dengan nama seperti Field1, Field2, Field3.

Ada dua cara umum untuk melakukan ini. Entah menetapkan langsung ke df.columns, atau menggunakan .set_axis(). Keduanya menghasilkan hasil yang sama. Trade-off-nya adalah antara kepraktisan singkat dan kemampuan untuk chaining.

Menetapkan daftar ke df.columns

Pendekatan paling langsung adalah menetapkan daftar baru ke atribut columns. Ambil DataFrame ini, dibangun dari list of lists tanpa informasi header, seperti yang Anda dapatkan saat membaca CSV tanpa header. Pandas menggunakan nama kolom bilangan bulat sebagai cadangan:

import pandas as pd

sensor_readings = pd.DataFrame([
    [1.2, 22.5, 1013],
    [1.5, 22.7, 1012],
    [1.3, 22.6, 1013]
])

print(sensor_readings)

Python DataFrame

Nama kolom 0, 1, dan 2 itu tidak berguna untuk analisis. Ganti dengan menetapkan daftar nama baru ke atribut columns:

sensor_readings.columns = ["wind_speed", "temperature_c", "pressure_hpa"]
print(sensor_readings)

Python DataFrame

Dua hal yang perlu diketahui tentang pendekatan ini. 

  1. Panjang daftar harus cocok persis. Berikan tiga nama untuk DataFrame empat kolom, dan pandas akan melempar ValueError: Length mismatch (kita akan bahas error ini lebih detail nanti). 

  2. Ini memodifikasi DataFrame secara langsung. Tidak ada parameter inplace di sini karena penetapan itulah modifikasinya. Jika Anda ingin salinan baru, gunakan .copy() terlebih dahulu atau gunakan .set_axis() di bawah.

Menggunakan .set_axis() untuk method chaining

Method .set_axis() melakukan hal yang sama, tetapi mengembalikan DataFrame baru sehingga Anda bisa melakukan chaining dengan operasi lainnya. Ambil DataFrame tanpa header yang serupa, tetapi kali ini dengan data yang lebih berantakan seperti banyak tempat desimal dan pembacaan yang hilang:

raw_sensor = pd.DataFrame([
    [1.234, 22.567, 1013],
    [1.512, 22.789, 1012],
    [None,  22.601, 1013],
    [1.345, 22.612, 1013]
])

sensor_clean = (
    raw_sensor
    .set_axis(["wind_speed_mps", "temp_celsius", "pressure_hpa"], axis=1)
    .round(1)
    .dropna()
)

print(sensor_clean)

Python DataFrame

Argumen axis=1 memberi tahu pandas bahwa Anda menetapkan label kolom (gunakan axis=0 untuk menetapkan indeks baris). Karena .set_axis() mengembalikan DataFrame baru, ini pas secara natural ke dalam pipeline transformasi berantai yang akan Anda tulis dalam kode ETL atau analisis nyata. Itulah alasan utama untuk lebih memilihnya daripada penetapan langsung di produksi.

Bagaimana Cara Mengganti Nama Kolom Menggunakan Fungsi di Pandas?

Alih-alih memetakan setiap nama lama ke nama baru, Anda bisa memberikan fungsi ke .rename(), dan pandas akan menerapkannya ke setiap nama kolom. Ini alat yang tepat saat Anda punya aturan, bukan daftar. Misalnya, "semua huruf kecil" atau "ganti setiap spasi dengan garis bawah."

Menggunakan fungsi string bawaan

Kasus paling sederhana adalah standarisasi huruf. Berikan str.lower, str.upper, atau str.title langsung ke argumen columns:

import pandas as pd

orders = pd.DataFrame({
    "Order ID": [1001, 1002, 1003],
    "Customer Name": ["Abe", "Rick", "Pat"],
    "Total Amount": [49.99, 120.00, 75.50]
})

orders_lower = orders.rename(columns=str.lower)
print(orders_lower.columns.tolist())

Daftar kolom Python

Perhatikan bahwa kita memberikan fungsinya sendiri (str.lower), bukan memanggilnya (str.lower()). Pandas menerapkannya ke setiap nama kolom satu per satu. Ini jalan pintas yang rapi untuk standarisasi huruf, tetapi tidak menangani spasi atau karakter khusus. Untuk itu, Anda akan membutuhkan lambda atau fungsi khusus.

Menggunakan lambda dan fungsi khusus

Untuk apa pun di luar perubahan huruf, lambda memberi Anda cara cepat untuk mengekspresikan transformasi secara inline. Jika Anda belum pernah menggunakan lambda, panduan pemula fungsi lambda Python kami adalah titik awal yang baik.

Pola umum adalah menjadikan huruf kecil dan mengganti spasi dengan garis bawah dalam satu langkah. Kita gunakan contoh sebelumnya:

orders_snake = orders.rename(columns=lambda col: col.lower().replace(" ", "_"))
print(orders_snake.columns.tolist())

Daftar kolom Python

Saat logikanya menjadi lebih rumit, pindahkan ke fungsi bernama. Pertimbangkan helper ini yang mengonversi nama kolom camelCase atau PascalCase menjadi snake_case:

import re

def to_snake_case(name: str) -> str:
    """Convert camelCase or PascalCase to snake_case."""
    s1 = re.sub(r"(.)([A-Z][a-z]+)", r"\1_\2", name)
    s2 = re.sub(r"([a-z0-9])([A-Z])", r"\1_\2", s1)
    return s2.lower()

api_response = pd.DataFrame({
    "userId": [1, 2, 3],
    "firstName": ["Abe", "Rick", "Pat"],
    "accountCreatedAt": ["2024-01-01", "2024-01-02", "2024-01-03"]
})

api_clean = api_response.rename(columns=to_snake_case)
print(api_clean.columns.tolist())

Daftar kolom Python

Fungsi bernama seperti ini lebih mudah diuji, digunakan ulang di berbagai notebook, dan didokumentasikan daripada one-liner yang cerdik. Gunakan lambda saat logikanya muat dalam satu baris, dan fungsi khusus saat tidak.

Bagaimana Cara Membersihkan Nama Kolom yang Berantakan Secara Massal di Pandas?

Saat data datang dari spreadsheet, API pihak ketiga, atau CSV yang diedit manual, nama kolom sering kali memiliki masalah yang tidak bisa diperbaiki dengan rapi hanya dengan .rename(). Saya berbicara tentang masalah seperti:

  • Spasi kosong di akhir
  • Campuran huruf besar-kecil
  • Tanda kurung
  • Hyphen
  • Karakter khusus
  • Karakter Unicode tak terlihat

Untuk situasi ini, pendekatan paling bersih adalah beroperasi langsung pada df.columns menggunakan aksesori .str, yang mengekspos method string vektorisasi (termasuk regex) ke semua nama kolom sekaligus. Ini juga fondasi dari pembersihan data di Python yang solid. Membersihkan nama kolom membuat setiap langkah hilir (filtering, merging, plotting) lebih kecil kemungkinannya salah.

Menghapus whitespace dan karakter khusus

Ambil DataFrame ini, dengan jenis nama yang Anda dapatkan dari ekspor Excel yang terlalu banyak disentuh:

import pandas as pd

raw_export = pd.DataFrame({
    "  Order ID ": [1001, 1002, 1003],
    "Customer Name (Full)": ["Abe", "Rick", "Pat"],
    "Total Amount ($)": [49.99, 120.00, 75.50],
    "Order-Date": ["2024-03-12", "2024-03-15", "2024-03-18"]
})

print(raw_export.columns.tolist())

Daftar kolom Python

Spasi di awal dan akhir adalah masalah paling umum dan paling membuat frustrasi, karena tidak terlihat. Hapus dalam satu baris:

raw_export.columns = raw_export.columns.str.strip()
print(raw_export.columns.tolist())

Daftar kolom Python

Untuk karakter khusus, .str.replace() menerima pola regex. Pola di bawah ini mempertahankan huruf, angka, garis bawah, dan spasi, dan menghapus yang lain:

raw_export.columns = raw_export.columns.str.replace(r"[^a-zA-Z0-9_ ]", "", regex=True)
print(raw_export.columns.tolist())

Daftar kolom Python

Tanda hubung, tanda kurung, dan simbol dolar hilang. Perhatikan bahwa Total Amount kini memiliki spasi di akhir (dari tempat ($) sebelumnya), dan OrderDate kehilangan tanda hubung sepenuhnya. Itulah mengapa kita strip lagi di akhir pipeline pembersihan.

Standarisasi ke snake_case

Praktik terbaik yang umum adalah mengonversi semua nama kolom ke snake_case sebelum Anda memulai analisis, seperti huruf kecil, kata dipisahkan garis bawah, tanpa karakter khusus. Rantai method .str untuk mencapainya dalam satu ekspresi:

raw_export = pd.DataFrame({
    "  Order ID ": [1001, 1002, 1003],
    "Customer Name (Full)": ["Abe", "Rick", "Pat"],
    "Total Amount ($)": [49.99, 120.00, 75.50],
    "Order-Date": ["2024-03-12", "2024-03-15", "2024-03-18"]
})

raw_export.columns = (
    raw_export.columns
    .str.strip()                                  # hapus spasi di awal/akhir
    .str.lower()                                  # jadikan semua huruf kecil
    .str.replace(r"[^a-z0-9]+", "_", regex=True)  # gabungkan non-alfanumerik menjadi garis bawah
    .str.strip("_")                               # hapus garis bawah di awal/akhir
)

print(raw_export.columns.tolist())

Daftar kolom Python

Empat baris, dan nama kolom Anda menjadi prediktabel, huruf kecil, dan dipisahkan garis bawah. Pola ini layak disimpan sebagai fungsi utilitas. Setelah Anda memilikinya, Anda bisa menerapkannya ke setiap DataFrame berantakan yang datang.

Sering kali Anda juga ingin menggabungkan penggantian nama dengan penghapusan kolom. Untuk itu, tutorial menghapus kolom di pandas mencakup langkah berikutnya.

Bagaimana Cara Mengganti Nama Kolom Saat Memuat Data di Pandas?

Jika Anda sudah tahu ingin nama kolom yang berbeda bahkan sebelum memuat file, Anda bisa mengganti nama langsung di dalam pd.read_csv(). Berikan daftar nama ke parameter names dan setel header=0 untuk memberi tahu pandas agar melewati baris header yang ada dan menggunakan nama Anda sebagai gantinya:

import pandas as pd
from io import StringIO

# Mensimulasikan file CSV untuk demonstrasi
csv_data = """txnId,custId,amt,date
1001,C01,49.99,2024-01-15
1002,C02,125.00,2024-01-16
1003,C01,79.50,2024-01-17"""

# Mengganti nama kolom saat memuat, melewati header asli
transactions = pd.read_csv(
    StringIO(csv_data),
    header=0,
    names=["transaction_id", "customer_id", "amount_usd", "transaction_date"]
)
print(transactions)

Python DataFrame

Ini adalah jalan pintas yang berguna saat Anda mengendalikan skema dan tidak ingin langkah .rename() terpisah mengotori kode pemuatan Anda. Jika file tidak memiliki baris header sama sekali, hilangkan header=0 dan cukup gunakan names=[...] untuk menetapkan nama kolom dari awal. Untuk melihat lebih dalam opsi pemuatan dataset, saya sarankan tutorial pandas read_csv().

Satu peringatan: Ini pendekatan serba atau tidak sama sekali. Parameter names mengganti setiap nama kolom, jadi panjang daftar harus cocok persis dengan jumlah kolom dalam file. Jika Anda hanya ingin mengganti nama beberapa kolom, muat file terlebih dahulu dan gunakan .rename() setelahnya.

Untuk penelusuran terpandu atas pola-pola ini bersama tugas pembersihan umum lainnya, saya sarankan mengikuti kursus Cleaning Data in Python kami.

Mengganti Nama Kolom di Polars vs. Pandas

Jika Anda bekerja di kedua pandas dan Polars, atau berencana demikian, ada baiknya mengetahui bagaimana masing-masing menangani penggantian nama kolom. API tingkat tingginya mirip, tetapi detailnya berbeda dengan cara yang bisa mengecoh Anda beberapa kali pertama. Polars adalah library DataFrame cepat berbasis Rust yang semakin umum di stack data modern, dan memori otot yang Anda bangun di pandas tidak selalu berpindah mulus.

Gagasan utamanya identik. Anda memetakan nama lama ke nama baru dengan dictionary. Perbedaannya ada pada detail. Polars bersifat immutable secara desain (tanpa inplace), method chaining adalah gaya idiomatik, dan penggantian nama tingkat kolom selama select menggunakan .alias() alih-alih langkah rename terpisah.

Perbandingan berdampingan

Tugas

Pandas

Polars

Ganti nama kolom spesifik

df.rename(columns={"old": "new"})

df.rename({"old": "new"})

Ganti semua nama kolom

df.columns = [...] atau df.set_axis([...], axis=1)

df.rename(dict(zip(df.columns, [...])))

Ganti nama saat select

Select dulu, lalu .rename()

df.select(pl.col("old").alias("new"))

Modifikasi in place

inplace=True didukung

Tidak didukung. Selalu mengembalikan DataFrame baru

Gaya idiomatik

inplace atau chaining

Selalu chaining

Penggantian nama yang sama di kedua library

Sebagai perbandingan, berikut penggantian nama sederhana di masing-masing library.

Pandas:

# Pandas
import pandas as pd

orders_pd = pd.DataFrame({
    "ord_id": [1001, 1002, 1003],
    "cust_nm": ["Abe", "Rick", "Pat"]
})

orders_pd = orders_pd.rename(columns={"ord_id": "order_id", "cust_nm": "customer_name"})
print(orders_pd)

Python DataFrame

Polars:

# Polars
import polars as pl

orders_pl = pl.DataFrame({
    "ord_id": [1001, 1002, 1003],
    "cust_nm": ["Abe", "Rick", "Pat"]
})

orders_pl = orders_pl.rename({"ord_id": "order_id", "cust_nm": "customer_name"})
print(orders_pl)

Python DataFrame

Ada dua perbedaan kecil. .rename() Polars menerima dictionary secara langsung. Tidak ada keyword columns= karena Polars hanya mendukung penggantian nama kolom (bukan indeks baris). Dan Anda harus menetapkan ulang hasilnya. Tidak ada inplace=True di Polars. Setiap operasi mengembalikan DataFrame baru.

Output Polars juga menampilkan dtype inline (i64, str) dan bentuk (shape) di atas, yang merupakan salah satu hal kecil yang disukai banyak orang setelah beralih. 

Mengganti nama kolom saat select

Untuk penggantian nama selama transformasi, Polars menggunakan .alias() di dalam .select() atau .with_columns():

# Polars
import polars as pl

orders_pl = pl.DataFrame({
    "ord_id": [1001, 1002, 1003],
    "cust_nm": ["Abe", "Rick", "Pat"]
})

# Select dan ganti nama dalam satu ekspresi
renamed = orders_pl.select(
    pl.col("ord_id").alias("order_id"),
    pl.col("cust_nm").alias("customer_name")
)

print(renamed)

Python DataFrame

Di pandas, padanannya adalah .rename() setelah seleksi kolom. Tidak ada yang lebih baik. Keduanya mencerminkan filosofi desain masing-masing library. 

Jika Anda menginginkan perbandingan yang lebih dalam antara keduanya, saya sarankan tutorial kinerja pandas versus polars. Dan jika Anda ingin menambahkan polars ke peralatan Anda, saya sarankan mengikuti Introduction to Polars course. 

Error Umum dan Cara Memperbaikinya

Ada dua error yang sering muncul saat mengganti nama kolom pandas. Berikut tampilannya, penyebabnya, dan cara memperbaikinya.

KeyError: nama kolom tidak ditemukan

Secara default, .rename() mengabaikan secara senyap key yang tidak cocok dengan kolom yang ada. Namun jika Anda memberikan errors='raise' untuk menangkap salah ketik, Anda akan mendapatkan KeyError saat sebuah key tidak ada:

import pandas as pd

orders = pd.DataFrame({
    "order_id": [1001, 1002, 1003],
    "customer_name": ["Abe", "Rick", "Pat"]
})

# Ini akan melempar error
orders.rename(columns={"Order_ID": "order_id"}, errors="raise")

KeyError

Penyebab paling umum adalah kekeliruan sensitivitas huruf (Order_ID versus order_id) atau spasi tersembunyi di akhir ("order_id " versus "order_id"). Saat Anda terkena KeyError, periksa tiga hal ini secara berurutan:

  1. Ejaan dan huruf besar-kecil yang tepat
  2. Whitespace tersembunyi
  3. Apakah kolom sudah diganti namanya sebelumnya

Untuk memverifikasi nama kolom sebenarnya:

print(orders.columns.tolist())

# Gunakan repr() sebagai alternatif
print([repr(c) for c in orders.columns])

Daftar kolom Python

Setelah Anda melihat string persis yang dipegang pandas, salah ketik biasanya terlihat jelas. Lalu perbaiki ejaan dan jalankan ulang:

orders = orders.rename(columns={"order_id": "Order_ID"}, errors="raise")
print(orders.columns.tolist())

Daftar kolom Python

Sekarang pertanyaannya, kapan menggunakan errors='raise' versus default errors='ignore'

  • Default-nya memaafkan. Ini berguna dalam skrip yang memproses DataFrame dengan skema bervariasi, di mana kolom yang hilang tidak boleh membuat apa pun crash. 

  • Beralih ke errors='raise' saat Anda ingin salah ketik muncul dengan keras selama pengembangan, terutama di notebook di mana kegagalan senyap menyebabkan berjam-jam debugging yang membingungkan di hilir.

ValueError: length mismatch dengan df.columns

Saat Anda menetapkan daftar ke df.columns atau menggunakan .set_axis(), panjang daftar harus cocok persis dengan jumlah kolom. Jika tidak, pandas akan melempar ValueError:

import pandas as pd

products = pd.DataFrame({
    "sku": ["A100", "A101", "A102"],
    "name": ["Widget", "Gadget", "Gizmo"],
    "price": [9.99, 14.99, 19.99]
})

# Ini akan melempar error
products.columns = ["product_sku", "product_name"]

ValueError

DataFrame memiliki tiga kolom, tetapi hanya dua nama baru yang diberikan. Solusinya adalah memeriksa jumlah kolom sebelum menetapkan:

print(len(products.columns))
products.columns = ["product_sku", "product_name", "product_price"]
print(products.columns.tolist())

Daftar kolom Python

Jika Anda bekerja dengan DataFrame di mana jumlah kolom dapat bervariasi, lebih aman menggunakan .rename() dengan dictionary. Ini hanya menyentuh kolom yang Anda sebut, jadi kolom yang hilang atau ekstra tidak akan membuat kode Anda crash.

Penutup

Mengganti nama kolom di pandas bermuara pada memilih metode yang sesuai dengan cakupan tugas Anda. Apa pun pendekatan yang Anda pilih, kemenangan praktis terbesar adalah menetapkan satu konvensi penamaan dan menerapkannya sebagai langkah pertama di setiap analisis. snake_case adalah yang paling banyak digunakan kode Python. Membersihkan nama kolom memakan beberapa detik di awal dan menyelamatkan Anda dari kejutan KeyError sepanjang proyek.

Gunakan .rename() dengan dictionary untuk penggantian nama terarah. Saat setiap kolom membutuhkan nama baru, menetapkan ke df.columns atau menggunakan .set_axis() lebih cepat daripada membangun dictionary pemetaan lama-ke-baru untuk semuanya. Dan jika penggantian nama mengikuti aturan seperti menghapus whitespace, menjadikan semua huruf kecil, mengonversi camelCase, maka memberikan fungsi, atau menggunakan aksesori .str memungkinkan Anda mengekspresikan aturan sekali saja alih-alih membuat daftar kasus. Polars menangani pekerjaan yang sama dengan API serupa, tetapi gaya immutable, chain-first mendorong Anda ke kebiasaan yang berbeda. 

Untuk terus membangun keterampilan DataFrame Anda, saya sarankan kursus Data Manipulation with pandas sebagai langkah berikutnya. Jika Anda menginginkan jalur belajar terstruktur, jalur karier Data Analyst in Python mencakup manipulasi DataFrame bersama peralatan analis lainnya.

FAQ Mengganti Nama Kolom di Pandas

Bagaimana cara mengganti nama kolom di pandas?

Ada beberapa metode, tetapi yang paling lugas adalah gunakan df = df.rename(columns={"old_name": "new_name"}). Anda juga dapat memberikan argumen inplace=True untuk memodifikasi DataFrame secara langsung.

Bagaimana cara mengganti nama beberapa kolom di pandas?

Untuk mengganti nama beberapa kolom di pandas, berikan semua penggantian dalam satu dictionary: df.rename(columns={"old1": "new1", "old2": "new2"})

Bagaimana cara mengganti semua nama kolom dalam DataFrame pandas?

Tetapkan daftar nama baru ke df.columns. Perhatian: Pastikan panjang daftar cocok dengan jumlah kolom, jika tidak, Anda akan mendapat ValueError.

Mengapa df.rename() tidak mengubah DataFrame saya?

Secara default, .rename() mengembalikan DataFrame baru. Tetapkan hasilnya kembali dengan df = df.rename(...) atau gunakan inplace=True.

Bagaimana cara mengganti nama kolom menjadi huruf kecil di pandas?

Gunakan df.columns = df.columns.str.lower() untuk menjadikan semua nama kolom huruf kecil dalam satu langkah.


Author
Rajesh Kumar
LinkedIn

Saya adalah penulis konten data science. Saya senang membuat konten seputar topik AI/ML/DS. Saya juga mengeksplorasi alat AI baru dan menuliskannya.

Topik

Pelajari Python Bersama DataCamp!

Kursus

Manipulasi Data dengan pandas

4 Hr
559.2K
Pelajari cara mengimpor dan membersihkan data, menghitung statistik, serta membuat visualisasi dengan pandas.
Lihat DetailRight Arrow
Mulai Kursus
Lihat Lebih BanyakRight Arrow