Saya ingin menambahkan _x
sufiks 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?
Saya ingin menambahkan _x
sufiks 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?
Jawaban:
Anda dapat menggunakan list
pemahaman:
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.
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.
inplace=True
opsi parameter). Jika tidak, sempurna.
Jika Anda mencoba memodifikasi df
di 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-string
pemformatan (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]
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, df
tidak 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
.
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)
new
or old
), bukan setiap kolom? Terima kasih.
df = pd.DataFrame([[1,2,3]]*10)
-> df.columns
, maka Anda akan menggunakandf.add_suffix('_x')
df.columns = df.columns.astype(str) + '_x'
seperti yang ditunjukkan metode pertama saya.
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.
df = pd.DataFrame([[1,2,3]]*10)
-> df.columns
, maka Anda akan menggunakandf.add_suffix('_x')
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')
DataFrame.rename
.Penghentian add_prefix
danadd_suffix
Di versi mendatang dari panda add_prefix
dan tidak add_suffix
akan 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 rename
dengan axis=1
dan 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)