Bagaimana cara menambahkan sufiks (atau awalan) ke setiap nama kolom?

89

Saya ingin menambahkan _xsufiks ke setiap nama kolom seperti ini:

featuresA = myPandasDataFrame.columns.values + '_x'

Bagaimana saya melakukan ini? Selain itu, jika saya ingin menambahkan x_sebagai sufiks, bagaimana solusinya akan berubah?

Klausos Klausos
sumber

Jawaban:

124

Anda dapat menggunakan listpemahaman:

df.columns = [str(col) + '_x' for col in df.columns]

Ada juga metode bawaan seperti .add_suffix()dan .add_prefix()seperti yang disebutkan dalam jawaban lain.

Stefan
sumber
ini adalah jawaban yang paling sederhana dan elegan!
Jinhua Wang
165

Berikut ini adalah cara terbaik untuk menambahkan sufiks menurut saya.

df = df.add_suffix('_some_suffix')

Karena ini adalah fungsi yang dipanggil di DataFrame dan mengembalikan DataFrame - Anda dapat menggunakannya dalam rangkaian panggilan.

Jarosław Szymczak
sumber
14
Anda dapat menggunakan add_prefix jika Anda ingin menambahkan awalan ke nama.
Jorge
9
Sayang sekali ini tidak bisa berubah (yaitu tidak memiliki inplace=Trueopsi parameter). Jika tidak, sempurna.
ijoseph
Saya pikir ini lebih baik daripada jawaban yang diterima dalam beberapa keadaan, karena dapat digunakan dalam rangkaian operasi dalam satu pernyataan, daripada membutuhkan pernyataannya sendiri.
Kapten Lepton
@CaptainLepton ketika bukankah jawaban ini lebih baik daripada jawaban yang diterima
baxx
1
Jika sufiks bukan konstanta. Judul berbicara tentang sufiks. Posting mempersempit ruang lingkup menjadi sufiks konstan tunggal, tetapi jika kita menjawab judul posting secara umum, maka pengaturan kolom melalui pemahaman daftar atau iterable lainnya lebih fleksibel
Kapten Lepton
18

Rangkaian Di Tempat Elegan

Jika Anda mencoba memodifikasi dfdi tempat, maka opsi termurah (dan paling sederhana) adalah penambahan di tempat langsung di df.columns(yaitu, menggunakan Index.__iadd__).

df = pd.DataFrame({"A": [9, 4, 2, 1], "B": [12, 7, 5, 4]})
df

   A   B
0  9  12
1  4   7
2  2   5
3  1   4

df.columns += '_some_suffix'
df

   A_some_suffix  B_some_suffix
0              9             12
1              4              7
2              2              5
3              1              4

Untuk menambahkan prefiks, Anda juga akan menggunakan

df.columns = 'some_prefix_' + df.columns
df

   some_prefix_A  some_prefix_B
0              9             12
1              4              7
2              2              5
3              1              4

Pilihan murah lainnya adalah menggunakan pemahaman daftar dengan f-stringpemformatan (tersedia di python3.6 +).

df.columns = [f'{c}_some_suffix' for c in df]
df

   A_some_suffix  B_some_suffix
0              9             12
1              4              7
2              2              5
3              1              4

Dan untuk awalan, demikian pula,

df.columns = [f'some_prefix{c}' for c in df]

Metode Rangkaian

Dimungkinkan juga untuk menambahkan * perbaikan saat perangkaian metode. Untuk menambahkan sufiks, gunakanDataFrame.add_suffix

df.add_suffix('_some_suffix')

   A_some_suffix  B_some_suffix
0              9             12
1              4              7
2              2              5
3              1              4

Ini mengembalikan salinan data. IOW, dftidak diubah.

Menambahkan prefiks juga dilakukan dengan DataFrame.add_prefix.

df.add_prefix('some_prefix_')

   some_prefix_A  some_prefix_B
0              9             12
1              4              7
2              2              5
3              1              4

Yang juga tidak mengubah df.


Kritik add_*fix

Ini adalah metode yang bagus jika Anda mencoba melakukan rangkaian metode:

df.some_method1().some_method2().add_*fix(...)

Namun, add_prefix(dan add_suffix) membuat salinan dari seluruh dataframe, hanya untuk mengubah header. Jika Anda yakin ini boros, tetapi masih ingin dirantai, Anda dapat menghubungi pipe:

def add_suffix(df):
    df.columns += '_some_suffix'
    return df

df.some_method1().some_method2().pipe(add_suffix)
cs95
sumber
Ini elegan! Bagaimana jika Anda ingin menambahkan prefiks atau sufiks ke subset kolom misalnya kolom yang namanya semuanya berisi kata umum (like newor old), bukan setiap kolom? Terima kasih.
Bowen Liu
1
@BowenLiu Saya akan menyarankan menggunakan df.rename () sebagai gantinya ... Meneruskan nama pemetaan kamus ke nama baru mereka. Kemudian panggil ganti nama dengan axis = 1. Anda juga dapat menggunakan tugas pemahaman daftar bersyarat.
cs95
Bekerja hanya dengan tipe data biasa sebagai nama kolom, bukan jika kolom Anda adalah RangeIndex seperti misalnya df = pd.DataFrame([[1,2,3]]*10)-> df.columns, maka Anda akan menggunakandf.add_suffix('_x')
questionto42
Anda dapat melakukan df.columns = df.columns.astype(str) + '_x' seperti yang ditunjukkan metode pertama saya.
cs95
4

Saya belum melihat solusi ini yang diusulkan di atas jadi menambahkan ini ke daftar:

df.columns += '_x'

Dan Anda dapat dengan mudah beradaptasi untuk skenario awalan.

JPA
sumber
Solusi terbaik untuk sufiks, meskipun tentu saja tidak dapat digunakan untuk prefiks.
questionto42
Bekerja hanya dengan tipe data biasa di nama kolom, bukan jika kolom Anda adalah RangeIndex seperti misalnya df = pd.DataFrame([[1,2,3]]*10)-> df.columns, maka Anda akan menggunakandf.add_suffix('_x')
questionto42
1

Saya Tahu 4 cara untuk menambahkan sufiks (atau awalan) ke nama kolom Anda:

1- df.columns = [str(col) + '_some_suffix' for col in df.columns]

atau

2- df.rename(columns= lambda col: col+'_some_suffix')

atau

3- df.columns += '_some_suffix'jauh lebih mudah.

atau, yang terbaik:

3- df.add_suffix('_some_suffix')

Mahmoud Reda
sumber
0

Menggunakan DataFrame.rename.

Penghentian add_prefixdanadd_suffix

Di versi mendatang dari panda add_prefixdan tidak add_suffixakan digunakan lagi . Metode baru yang disarankan adalah dengan menggunakan DataFrame.rename:

df = pd.DataFrame({'A': range(3), 'B': range(4, 7)})
print(df)
   A  B
0  0  4
1  1  5
2  2  6

Menggunakan renamedengan axis=1dan pemformatan string:

df.rename('col_{}'.format, axis=1)
# or df.rename(columns='col_{}'.format)

   col_A  col_B
0      0      4
1      1      5
2      2      6

Untuk benar-benar menimpa nama kolom Anda, kami dapat menetapkan nilai yang dikembalikan ke df:

df = df.rename('col_{}'.format, axis=1)

atau gunakan inplace=True:

df.rename('col_{}'.format, axis=1, inplace=True)
Erfan
sumber