Pertanyaan Mengganti nama kolom di panda


Saya memiliki DataFrame menggunakan panda dan label kolom yang harus saya edit untuk mengganti label kolom asli.

Saya ingin mengubah nama kolom dalam DataFrame A di mana nama kolom aslinya adalah:

['$a', '$b', '$c', '$d', '$e'] 

untuk

['a', 'b', 'c', 'd', 'e'].

Saya memiliki nama kolom yang diedit yang disimpan dalam daftar, tetapi saya tidak tahu bagaimana mengganti nama kolom.


1080
2017-07-05 14:21


asal


Jawaban:


Tetapkan saja ke .columns atribut:

>>> df = pd.DataFrame({'$a':[1,2], '$b': [10,20]})
>>> df.columns = ['a', 'b']
>>> df
   a   b
0  1  10
1  2  20

1117
2017-07-05 14:23



Menggunakan df.rename() berfungsi dan rujuk kolom untuk diubah namanya. Tidak semua kolom harus diganti namanya:

df = df.rename(columns={'oldName1': 'newName1', 'oldName2': 'newName2'})
# Or rename the existing DataFrame (rather than creating a copy) 
df.rename(columns={'oldName1': 'newName1', 'oldName2': 'newName2'}, inplace=True)

1859
2017-07-06 01:48



Itu rename metode dapat mengambil fungsi, misalnya:

In [11]: df.columns
Out[11]: Index([u'$a', u'$b', u'$c', u'$d', u'$e'], dtype=object)

In [12]: df.rename(columns=lambda x: x[1:], inplace=True)

In [13]: df.columns
Out[13]: Index([u'a', u'b', u'c', u'd', u'e'], dtype=object)

293
2018-05-21 09:58



Seperti yang didokumentasikan di http://pandas.pydata.org/pandas-docs/stable/text.html:

df.columns = df.columns.str.replace('$','')

119
2018-05-30 13:24



Karena Anda hanya ingin menghapus tanda $ di semua nama kolom, Anda cukup melakukan:

df = df.rename(columns=lambda x: x.replace('$', ''))

ATAU

df.rename(columns=lambda x: x.replace('$', ''), inplace=True)

115
2018-03-26 10:20



Pandas 0,21+ Jawaban

Ada beberapa pembaruan signifikan untuk penggantian nama kolom di versi 0.21.

  • Itu rename metode telah menambahkan axis parameter yang dapat diatur ke columns atau 1. Pembaruan ini membuat metode ini cocok dengan sisa pandas API. Masih memiliki index dan columns parameter tetapi Anda tidak lagi terpaksa menggunakannya.
  • Itu set_axis metode dengan inplace mulai False memungkinkan Anda untuk mengganti nama semua label indeks atau kolom dengan daftar.

Contoh untuk Pandas 0,21+

Bentukan contoh DataFrame:

df = pd.DataFrame({'$a':[1,2], '$b': [3,4], 
                   '$c':[5,6], '$d':[7,8], 
                   '$e':[9,10]})

   $a  $b  $c  $d  $e
0   1   3   5   7   9
1   2   4   6   8  10

Menggunakan rename dengan axis='columns' atau axis=1

df.rename({'$a':'a', '$b':'b', '$c':'c', '$d':'d', '$e':'e'}, axis='columns')

atau

df.rename({'$a':'a', '$b':'b', '$c':'c', '$d':'d', '$e':'e'}, axis=1)

Keduanya menghasilkan hal-hal berikut:

   a  b  c  d   e
0  1  3  5  7   9
1  2  4  6  8  10

Masih mungkin untuk menggunakan tanda tangan metode lama:

df.rename(columns={'$a':'a', '$b':'b', '$c':'c', '$d':'d', '$e':'e'})

Itu rename fungsi juga menerima fungsi yang akan diterapkan untuk setiap nama kolom.

df.rename(lambda x: x[1:], axis='columns')

atau

df.rename(lambda x: x[1:], axis=1)

Menggunakan set_axis dengan daftar dan inplace=False

Anda dapat memberikan daftar ke set_axis metode yang sama panjangnya dengan jumlah kolom (atau indeks). Saat ini, inplace default ke True, tapi inplace akan gagal False dalam rilis mendatang.

df.set_axis(['a', 'b', 'c', 'd', 'e'], axis='columns', inplace=False)

atau

df.set_axis(['a', 'b', 'c', 'd', 'e'], axis=1, inplace=False)

Mengapa tidak digunakan df.columns = ['a', 'b', 'c', 'd', 'e']?

Tidak ada yang salah dengan menugaskan kolom secara langsung seperti ini. Ini adalah solusi yang sangat baik.

Keuntungan menggunakan set_axis adalah bahwa itu dapat digunakan sebagai bagian dari rantai metode dan mengembalikan salinan baru dari DataFrame. Tanpa itu, Anda harus menyimpan langkah-langkah perantara dari rantai ke variabel lain sebelum menetapkan kembali kolom.

# new for pandas 0.21+
df.some_method1()
  .some_method2()
  .set_axis()
  .some_method3()

# old way
df1 = df.some_method1()
        .some_method2()
df1.columns = columns
df1.some_method3()

90
2017-10-24 13:39



df.columns = ['a', 'b', 'c', 'd', 'e']

Ini akan menggantikan nama yang ada dengan nama yang Anda berikan, dalam urutan yang Anda berikan.

Anda juga dapat menetapkan mereka berdasarkan indeks seperti ini:

df.columns.values[2] = 'c'    #renames the 2nd column to 'c' (in position #3)

66
2018-03-22 08:59



old_names = ['$a', '$b', '$c', '$d', '$e'] 
new_names = ['a', 'b', 'c', 'd', 'e']
df.rename(columns=dict(zip(old_names, new_names)), inplace=True)

Dengan cara ini Anda dapat mengedit secara manual new_names sesuai keinginan kamu. Bekerja dengan baik ketika Anda perlu mengganti nama hanya beberapa kolom untuk memperbaiki salah ejaan, aksen, menghapus karakter khusus, dll.


52
2018-05-21 17:48



Saya pikir metode ini berguna:

df.rename(columns={"old_column_name1":"new_column_name1", "old_column_name2":"new_column_name2"})

Metode ini memungkinkan Anda mengubah nama kolom secara individual.


30
2018-03-17 09:13