Pandas veri çerçevesi sütun başlıklarının tamamını nasıl küçük harf yapabilirim?


101

Pandalar veri çerçevemdeki tüm sütun başlıklarını küçük harf yapmak istiyorum

Misal

Sahip olursam:

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
....

Aşağıdaki gibi bir şey yaparak XRAT'yi xrat olarak değiştirmek istiyorum:

data.headers.lowercase()

Böylece anladım:

  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
....

Her bir sütun başlığının adını önceden bilmeyeceğim.


11
Daha kolaydf.columns = df.columns.str.lower()
Alex Montoya

Yanıtlar:


185

Bunu şu şekilde yapabilirsiniz:

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

veya

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

misal:

>>> 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

7
Bunun, alt (sütun1) == alt (sütun2) (örneğin, 'a' ve 'A') olduğunda yinelenen sütun adlarına yol açabileceğini unutmayın. Bu, daha sonra sütunlara başvurulduğunda istenmeyen sonuçlara neden olabilir. (ör. data ['a'], bir Seri değil, tüm sütunların adı 'a' olan bir DataFrame döndürür). Bir örnek için bu özüne
grisaitis

1
[x.lower() for x in data.columns]eşdeğerdir:[x.lower() for x in data]
joctee

Siz varken, kullanmak iyidir[x.lower().strip() for x in df0]
Pawel Kranzberg

@PawelKranzberg Do nasıl sütun adlarını düşürmek için bir fikrin varMultiIndex
curious_nustian

1
@curious_nustian - Evet, örneğin:df.index.names = [x.lower().strip() for x in df.index.names]
Pawel Kranzberg

103

Sen ile kolayca yapabilirdi str.loweriçin columns:

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

Misal:

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

22

Yeniden adlandırmayı zincirleme yöntem çağrısı kullanarak yapmak istiyorsanız, kullanabilirsiniz

data.rename(
    columns=unicode.lower
)

(Python 2)

veya

data.rename(
    columns=str.lower
)

(Python 3)


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

en kolay olanıdır, ancak bazı başlıklar sayısal ise hata verecektir

sayısal başlıklarınız varsa bunu kullanın:

df.columns = [str(x).lower() for x in df.columns]

1
Sanırım bu df.columns.astype(str).str.lower()durumda yazmak daha kolay ama belki biraz ayrıntılı.
Anton Protopopov

Bu iyi bir öneri!
Chadee Fouad

0

İşte basit bir yol: data.columns = data.columns.str.lower()


Alan sayısal ise bu bir hata verecektir
Chadee Fouad
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.