Bagaimana cara membuat header kolom dataframe panda semua huruf kecil?

98

Saya ingin membuat semua tajuk kolom dalam huruf kecil bingkai data panda saya

Contoh

Jika saya memiliki:

data =

  country country isocode  year     XRAT          tcgdp
0  Canada             CAN  2001  1.54876   924909.44207
1  Canada             CAN  2002  1.56932   957299.91586
2  Canada             CAN  2003  1.40105  1016902.00180
....

Saya ingin mengubah XRAT menjadi xrat dengan melakukan sesuatu seperti:

data.headers.lowercase()

Sehingga saya mendapatkan:

  country country isocode  year     xrat          tcgdp
0  Canada             CAN  2001  1.54876   924909.44207
1  Canada             CAN  2002  1.56932   957299.91586
2  Canada             CAN  2003  1.40105  1016902.00180
3  Canada             CAN  2004  1.30102  1096000.35500
....

Saya tidak akan tahu nama dari setiap tajuk kolom sebelumnya.

natsuki_2002
sumber
11
Lebih mudahdf.columns = df.columns.str.lower()
Alex Montoya

Jawaban:

179

Anda bisa melakukannya seperti ini:

data.columns = map(str.lower, data.columns)

atau

data.columns = [x.lower() for x in data.columns]

contoh:

>>> data = pd.DataFrame({'A':range(3), 'B':range(3,0,-1), 'C':list('abc')})
>>> data
   A  B  C
0  0  3  a
1  1  2  b
2  2  1  c
>>> data.columns = map(str.lower, data.columns)
>>> data
   a  b  c
0  0  3  a
1  1  2  b
2  2  1  c
Roman Pekar
sumber
7
Perhatikan bahwa ini dapat menyebabkan nama kolom duplikat bila lebih rendah (kolom1) == lebih rendah (kolom2) (misalnya, 'a' dan 'A'). Ini dapat memiliki konsekuensi yang tidak diinginkan saat mereferensikan kolom nanti. (misalnya, data ['a'] akan mengembalikan DataFrame, bukan Seri, dengan semua kolom bernama 'a'). Lihat inti ini untuk contoh: gist.github.com/grisaitis/170e82a008480acb4fa3
grisaitis
1
[x.lower() for x in data.columns]setara dengan:[x.lower() for x in data]
joctee
Saat Anda melakukannya, ada baiknya untuk digunakan[x.lower().strip() for x in df0]
Pawel Kranzberg
@PawelKranzberg Apakah Anda tahu cara menurunkan nama kolomMultiIndex
penasaran_nustian
1
@curious_nustian - Ya, misalnya:df.index.names = [x.lower().strip() for x in df.index.names]
Pawel Kranzberg
99

Anda dapat melakukannya dengan mudah dengan str.loweruntuk columns:

df.columns = df.columns.str.lower()

Contoh:

In [63]: df
Out[63]: 
  country country isocode  year     XRAT         tcgdp
0  Canada             CAN  2001  1.54876  9.249094e+05
1  Canada             CAN  2002  1.56932  9.572999e+05
2  Canada             CAN  2003  1.40105  1.016902e+06

In [64]: df.columns = df.columns.str.lower()

In [65]: df
Out[65]: 
  country country isocode  year     xrat         tcgdp
0  Canada             CAN  2001  1.54876  9.249094e+05
1  Canada             CAN  2002  1.56932  9.572999e+05
2  Canada             CAN  2003  1.40105  1.016902e+06
Anton Protopopov
sumber
20

Jika Anda ingin melakukan rename menggunakan metode chained call, Anda bisa menggunakan

data.rename(
    columns=unicode.lower
)

(Python 2)

atau

data.rename(
    columns=str.lower
)

(Python 3)

theister
sumber
1
df.columns = df.columns.str.lower()

adalah yang termudah tetapi akan memberikan kesalahan jika beberapa header berupa numerik

jika Anda memiliki header numerik, gunakan ini:

df.columns = [str(x).lower() for x in df.columns]
Chadee Fouad
sumber
0

Ini caranya yang sederhana: data.columns = data.columns.str.lower()

AnksG
sumber
Ini akan memberikan kesalahan jika bidangnya numerik
Chadee Fouad