Bagaimana cara mengganti nama kolom tertentu dalam panda?
Dari v0.24 +, untuk mengganti nama satu (atau lebih) kolom sekaligus,
Jika Anda perlu mengganti nama SEMUA kolom sekaligus,
DataFrame.set_axis()
metode dengan axis=1
. Lewati urutan seperti daftar. Opsi juga tersedia untuk modifikasi di tempat.
rename
dengan axis=1
df = pd.DataFrame('x', columns=['y', 'gdp', 'cap'], index=range(5))
df
y gdp cap
0 x x x
1 x x x
2 x x x
3 x x x
4 x x x
Dengan 0.21+, Anda sekarang dapat menentukan axis
parameter dengan rename
:
df.rename({'gdp':'log(gdp)'}, axis=1)
# df.rename({'gdp':'log(gdp)'}, axis='columns')
y log(gdp) cap
0 x x x
1 x x x
2 x x x
3 x x x
4 x x x
(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 dengan columns
parameter — mereka melakukan hal yang sama.
df.rename(columns={'gdp': 'log(gdp)'})
y log(gdp) cap
0 x x x
1 x x x
2 x x x
3 x x x
4 x x x
rename
juga menerima panggilan balik yang dipanggil satu kali untuk setiap kolom.
df.rename(lambda x: x[0], axis=1)
# df.rename(lambda x: x[0], axis='columns')
y g c
0 x x x
1 x x x
2 x x x
3 x x x
4 x x x
Untuk skenario khusus ini, Anda ingin menggunakannya
df.rename(lambda x: 'log(gdp)' if x == 'gdp' else x, axis=1)
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.
df.columns = df.columns.str.replace('gdp', 'log(gdp)')
df
y log(gdp) cap
0 x x x
1 x x x
2 x x x
3 x x x
4 x x x
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 menentukan inplace=False
untuk mengembalikan salinan yang dimodifikasi.
df.set_axis(['cap', 'log(gdp)', 'y'], axis=1, inplace=False)
# df.set_axis(['cap', 'log(gdp)', 'y'], axis='columns', inplace=False)
cap log(gdp) y
0 x x x
1 x x x
2 x x x
3 x x x
4 x x x
Catatan: Dalam rilis mendatang, inplace
akan default ke True
.
Metode Chaining
Mengapa memilih set_axis
ketika kita sudah memiliki cara yang efisien dalam menentukan kolom df.columns = ...
? Seperti yang ditunjukkan oleh Ted Petrou dalam [jawaban ini], ( https://stackoverflow.com/a/46912050/4909087 ) set_axis
berguna saat mencoba metode berantai.
Membandingkan
# new for pandas 0.21+
df.some_method1()
.some_method2()
.set_axis()
.some_method3()
Melawan
# old way
df1 = df.some_method1()
.some_method2()
df1.columns = columns
df1.some_method3()
Yang pertama adalah sintaksis yang lebih alami dan mengalir bebas.