Saya punya kerangka data yang disebut data
. Bagaimana saya mengganti nama satu-satunya tajuk kolom? Misalnya gdp
untuk log(gdp)
?
data =
y gdp cap
0 1 2 5
1 2 3 9
2 8 7 2
3 3 4 7
4 6 7 7
5 4 8 3
6 8 2 8
7 9 9 10
8 6 6 4
9 10 10 7
Jawaban:
The
rename
menunjukkan bahwa ia menerima sebuah dict sebagai param untukcolumns
sehingga Anda hanya lulus dict dengan satu entri.Lihat juga terkait
sumber
inplace
param, jika mengabaikan param ini maka ini adalah bug, dapatkah Anda melakukan pengaturan waktu dengan dan tanpa param, juga mencoba sesuatu sepertinew_df = df.rename(columns={'new_name':'old_name'})
dan melihat apakah ini lebih cepat atau tidakinplace
param hampir menggandakan waktu dari 14 detik menjadi 26 detik. Namun 14 detik masih cukup lama hanya untuk mengganti header ..Implementasi yang jauh lebih cepat adalah menggunakan
list-comprehension
jika Anda perlu mengganti nama satu kolom.Jika diperlukan untuk mengganti nama beberapa kolom, gunakan ekspresi kondisional seperti:
Atau, buat pemetaan menggunakan
dictionary
dan jalankan operasilist-comprehension
dengan ituget
dengan menetapkan nilai default sebagai nama lama:Pengaturan waktu:
sumber
pd.merge_asof()
karena ini adalah ekspresi :(.Dari v0.24 +, untuk mengganti nama satu (atau lebih) kolom sekaligus,
DataFrame.rename()
denganaxis=1
atauaxis='columns'
(axis
argumen tersebut diperkenalkan padav0.21
.Index.str.replace()
untuk penggantian berbasis string / regex.Jika Anda perlu mengganti nama SEMUA kolom sekaligus,
DataFrame.set_axis()
metode denganaxis=1
. Lewati urutan seperti daftar. Opsi juga tersedia untuk modifikasi di tempat.rename
denganaxis=1
Dengan 0.21+, Anda sekarang dapat menentukan
axis
parameter denganrename
:(Catatan yang
rename
tidak ada di tempat secara default, jadi Anda harus menetapkan kembali hasilnya .)Penambahan ini telah dibuat untuk meningkatkan konsistensi dengan sisa API.
axis
Argumen baru ini analog dengancolumns
parameter — mereka melakukan hal yang sama.rename
juga menerima panggilan balik yang dipanggil satu kali untuk setiap kolom.Untuk skenario khusus ini, Anda ingin menggunakannya
Index.str.replace
Mirip dengan
replace
metode string dalam python, panda Indeks dan Seri (objek dtype saja) mendefinisikan metode ("vectorized")str.replace
untuk string dan penggantian berbasis regex.Keuntungannya dibandingkan metode lain adalah
str.replace
mendukung regex (diaktifkan secara default). Lihat dokumen untuk informasi lebih lanjut.Melewati daftar
set_axis
denganaxis=1
Panggil
set_axis
dengan daftar tajuk. Panjang daftar harus sama dengan kolom / ukuran indeks.set_axis
bermutasi DataFrame asli secara default, tetapi Anda dapat menentukaninplace=False
untuk mengembalikan salinan yang dimodifikasi.Catatan: Dalam rilis mendatang,
inplace
akan default keTrue
.Metode Chaining
Mengapa memilih
set_axis
ketika kita sudah memiliki cara yang efisien dalam menentukan kolomdf.columns = ...
? Seperti yang ditunjukkan oleh Ted Petrou dalam [jawaban ini], ( https://stackoverflow.com/a/46912050/4909087 )set_axis
berguna saat mencoba metode berantai.Membandingkan
Melawan
Yang pertama adalah sintaksis yang lebih alami dan mengalir bebas.
sumber
Setidaknya ada lima cara berbeda untuk mengganti nama kolom tertentu dalam panda, dan saya telah mendaftarkannya di bawah ini bersama dengan tautan ke jawaban asli. Saya juga menghitung waktu metode ini dan menemukan mereka melakukan hampir sama (meskipun YMMV tergantung pada set data dan skenario Anda). Kasus uji di bawah ini adalah untuk mengubah nama kolom
A
M
N
Z
untukA2
M2
N2
Z2
di dataframe dengan kolomA
untukZ
mengandung satu juta baris.Keluaran:
Gunakan metode yang paling intuitif untuk Anda dan paling mudah untuk Anda terapkan dalam aplikasi Anda.
sumber