Wie kann ich Pandas Dataframe-Spaltenüberschriften in Kleinbuchstaben erstellen?


96

Ich möchte alle Spaltenüberschriften in meinem Pandas-Datenrahmen in Kleinbuchstaben setzen

Beispiel

Wenn ich habe:

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

Ich möchte XRAT in xrat ändern, indem ich Folgendes mache:

data.headers.lowercase()

Damit ich bekomme:

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

Ich werde die Namen der einzelnen Spaltenüberschriften nicht im Voraus kennen.


10
Einfacherdf.columns = df.columns.str.lower()
Alex Montoya

Antworten:


174

Sie können es so machen:

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

oder

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

Beispiel:

>>> 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
Beachten Sie, dass dies zu doppelten Spaltennamen führen kann, wenn niedriger (Spalte1) == niedriger (Spalte2) ist (z. B. 'a' und 'A'). Dies kann unbeabsichtigte Folgen haben, wenn später auf Spalten verwiesen wird. (z. B. gibt data ['a'] einen DataFrame zurück, keine Serie, mit allen Spalten mit dem Namen 'a'). Ein Beispiel finden Sie in dieser Übersicht: gist.github.com/grisaitis/170e82a008480acb4fa3
Grisaitis

1
[x.lower() for x in data.columns]ist gleichbedeutend mit:[x.lower() for x in data]
Joctee

Während Sie gerade dabei sind, ist es gut zu benutzen[x.lower().strip() for x in df0]
Pawel Kranzberg

@PawelKranzberg Haben Sie eine Idee, wie Sie die Spaltennamen vonMultiIndex
odd_nustian

1
@curious_nustian - Ja, zB:df.index.names = [x.lower().strip() for x in df.index.names]
Pawel Kranzberg

99

Sie könnten es leicht machen mit str.lowerfür columns:

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

Beispiel:

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

19

Wenn Sie die Umbenennung mit einem verketteten Methodenaufruf durchführen möchten, können Sie verwenden

data.rename(
    columns=unicode.lower
)

(Python 2)

oder

data.rename(
    columns=str.lower
)

(Python 3)


0

Hier ist ein einfacher Weg: data.columns = data.columns.str.lower()


Dies gibt einen Fehler aus, wenn das Feld numerisch ist
Chadee Fouad

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

ist am einfachsten, gibt jedoch einen Fehler aus, wenn einige Überschriften numerisch sind

Wenn Sie numerische Überschriften haben, verwenden Sie diese:

df.columns = [str(x).lower() for x in df.columns]
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.