Frage Umbenennen von Spalten in Pandas


Ich habe einen Datenrahmen mit Pandas und Spaltenbeschriftungen, die ich bearbeiten muss, um die ursprünglichen Spaltenbeschriftungen zu ersetzen.

Ich möchte die Spaltennamen in einem DataFrame ändern A wo die ursprünglichen Spaltennamen sind:

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

zu

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

Ich habe die bearbeiteten Spaltennamen in einer Liste gespeichert, aber ich weiß nicht, wie ich die Spaltennamen ersetzen soll.


1080
2017-07-05 14:21


Ursprung


Antworten:


Ordnen Sie es einfach dem .columns Attribut:

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



Benutze die df.rename() Funktion und verweisen Sie auf die Spalten, die umbenannt werden sollen. Nicht alle Spalten müssen umbenannt werden:

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



Das rename Methode kann eine Funktion annehmen, zum Beispiel:

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



Wie in. Dokumentiert http://pandas.pydata.org/pandas-docs/stable/text.html:

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

119
2018-05-30 13:24



Da Sie nur das $ -Zeichen in allen Spaltennamen entfernen möchten, können Sie einfach Folgendes tun:

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

ODER

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

115
2018-03-26 10:20



Pandas 0.21+ Antwort

Bei der Spaltenumbenennung in Version 0.21 wurden einige wichtige Änderungen vorgenommen.

  • Das rename Methode hat hinzugefügt axis Parameter, auf den eingestellt werden kann columns oder 1. Mit diesem Update passt diese Methode zum Rest der Pandas-API. Es hat immer noch die index und columns Parameter, aber Sie sind nicht mehr gezwungen, sie zu verwenden.
  • Das set_axis Methode mit dem inplace einstellen False ermöglicht es Ihnen, alle Index- oder Spaltenbeschriftungen mit einer Liste umzubenennen.

Beispiele für Pandas 0.21+

Beispieldatenrahmen erstellen:

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

Verwenden rename mit axis='columns' oder axis=1

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

oder

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

Beide ergeben folgendes:

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

Es ist immer noch möglich, die alte Methodensignatur zu verwenden:

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

Das rename Funktion akzeptiert auch Funktionen, die auf jeden Spaltennamen angewendet werden.

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

oder

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

Verwenden set_axis mit einer Liste und inplace=False

Sie können der Liste eine Liste hinzufügen set_axis Methode, deren Länge der Anzahl der Spalten (oder des Indexes) entspricht. Zur Zeit, inplace standardmäßig auf True, aber inplace wird standardmäßig verwendet False in zukünftigen Versionen.

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

oder

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

Warum nicht benutzen? df.columns = ['a', 'b', 'c', 'd', 'e']?

Es ist nichts falsch daran, Spalten direkt so zuzuweisen. Es ist eine vollkommen gute Lösung.

Der Vorteil der Verwendung set_axis ist, dass es als Teil einer Methodenkette verwendet werden kann und dass es eine neue Kopie des DataFrames zurückgibt. Ohne sie müssten Sie Ihre Zwischenschritte der Kette in einer anderen Variablen speichern, bevor Sie die Spalten neu zuweisen.

# 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']

Es ersetzt die vorhandenen Namen durch die von Ihnen angegebenen Namen in der von Ihnen angegebenen Reihenfolge.

Sie können sie auch nach Index wie folgt zuweisen:

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

66
2018-03-22 08:59