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 axisparameter 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 renametidak ada di tempat secara default, jadi Anda harus menetapkan kembali hasilnya .)
Penambahan ini telah dibuat untuk meningkatkan konsistensi dengan sisa API. axisArgumen baru ini analog dengan columnsparameter — 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 replacemetode string dalam python, panda Indeks dan Seri (objek dtype saja) mendefinisikan metode ("vectorized") str.replaceuntuk 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.replacemendukung regex (diaktifkan secara default). Lihat dokumen untuk informasi lebih lanjut.
Melewati daftar set_axisdenganaxis=1
Panggil set_axisdengan daftar tajuk. Panjang daftar harus sama dengan kolom / ukuran indeks. set_axisbermutasi DataFrame asli secara default, tetapi Anda dapat menentukan inplace=Falseuntuk 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, inplaceakan default ke True.
Metode Chaining
Mengapa memilih set_axisketika 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_axisberguna 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.