Ändern eines bestimmten Spaltennamens in pandas DataFrame [duplicate]

Lesezeit: 4 Minuten

Benutzer-Avatar
Grafik markieren

Ich suchte nach einer eleganten Möglichkeit, einen bestimmten Spaltennamen in a zu ändern DataFrame.

Daten abspielen …

import pandas as pd
d = {
         'one': [1, 2, 3, 4, 5],
         'two': [9, 8, 7, 6, 5],
         'three': ['a', 'b', 'c', 'd', 'e']
    }
df = pd.DataFrame(d)

Die eleganteste Lösung, die ich bisher gefunden habe …

names = df.columns.tolist()
names[names.index('two')] = 'new_name'
df.columns = names

Ich hatte auf einen einfachen Einzeiler gehofft … dieser Versuch ist gescheitert …

df.columns[df.columns.tolist().index('one')] = 'another_name'

Hinweise werden dankbar entgegengenommen.

Ein Einzeiler existiert:

In [27]: df=df.rename(columns = {'two':'new_name'})

In [28]: df
Out[28]: 
  one three  new_name
0    1     a         9
1    2     b         8
2    3     c         7
3    4     d         6
4    5     e         5

Es folgt der Dokumentstring für die rename Methode.

Definition: df.rename(self, index=None, columns=None, copy=True, inplace=False)
Docstring:
Alter index and / or columns using input function or
functions. Function / dict values must be unique (1-to-1). Labels not
contained in a dict / Series will be left as-is.

Parameters
----------
index : dict-like or function, optional
    Transformation to apply to index values
columns : dict-like or function, optional
    Transformation to apply to column values
copy : boolean, default True
    Also copy underlying data
inplace : boolean, default False
    Whether to return a new DataFrame. If True then value of copy is
    ignored.

See also
--------
Series.rename

Returns
-------
renamed : DataFrame (new object)

  • Dies funktioniert bei mir nicht, es sei denn, ich verwende inplace=True, wie in der Antwort von @Jeong-Yoon Lee gezeigt.

    – J Strahl

    19. März 2020 um 8:55 Uhr

Benutzer-Avatar
Jeong-Yoon Lee

Seit inplace Argument verfügbar ist, müssen Sie den ursprünglichen Datenrahmen nicht kopieren und sich selbst zuweisen, sondern gehen Sie wie folgt vor:

df.rename(columns={'two':'new_name'}, inplace=True)

Benutzer-Avatar
Jakob H

Wie wäre es mit?

df.columns[2] = "new_name"

  • Eigentlich funktioniert das nicht, wenn Sie später den Spaltennamen für andere Operationen wie in df verwenden[‘new_name’]

    – Meisterjoghurt

    4. Juli 2016 um 16:46 Uhr

  • Diese Antwort war nützlich für mich, um eine bestimmte Spalte in einen neuen Namen zu ändern. 1. Spalte ist Index 0, 2. Spalte ist Index 1 und so weiter. nette Lösung … und ich bin sicher, dass dies mehr Leuten helfen wird … da die anderen Lösungen erfordern, dass Sie die ursprünglichen Spaltennamen vorher kennen und kopieren … während dies eine schnelle und schmutzige Methode ist … die ihre eigene Verwendung hat.

    – ihightower

    30. September 2017 um 17:27 Uhr


  • @MasterYogurt Ihr Kommentar ist nicht korrekt. Es ist möglich durchzuführen df['new_name'] (und andere Panda-Dinge) nach dem Ändern von Variablen wie oben beschrieben. Ihr Kommentar war möglicherweise gültig, als er ursprünglich gepostet wurde.

    – Jakob H

    29. September 2018 um 21:12 Uhr


  • Davon abgesehen, mit der rename Methoden ist eine bessere Lösung.

    – Jakob H

    29. September 2018 um 21:13 Uhr

  • @JacobH Ich stoße immer noch auf dieses Problem mit Pandas v1.0.3

    – Philipp

    20. Oktober 2020 um 14:08 Uhr

Wenn Sie wissen, welche Spalte # es ist (erste / zweite / n-te), dann funktioniert diese Lösung, die zu einer ähnlichen Frage gepostet wurde, unabhängig davon, ob sie benannt oder unbenannt ist, und in einer Zeile: https://stackoverflow.com/a/26336314/ 4355695

df.rename(columns = {list(df)[1]:'new_name'}, inplace=True)
# 1 is for second column (0,1,2..)

Pandas 0.21 hat jetzt einen Achsenparameter

Die Umbenennungsmethode hat einen Achsenparameter erhalten, der mit den meisten anderen Teilen der Pandas-API übereinstimmt.

Also zusätzlich dazu:

df.rename(columns = {'two':'new_name'})

Du kannst tun:

df.rename({'two':'new_name'}, axis=1)

oder

df.rename({'two':'new_name'}, axis="columns")

  • df.rename({‘two’:’new_name’}, axis=’columns’) Löst TypeError aus: Kann nicht sowohl ‘axis’ als auch ‘index’ oder ‘columns’ angeben.

    – Hier hier

    30. Dezember 2017 um 23:37 Uhr


  • @HereHere Stellen Sie sicher, dass Sie die Pandas-Version 0.21 verwenden. Tun pd.__version__ um Ihre Version zu überprüfen

    – Ted Petrou

    30. Dezember 2017 um 23:49 Uhr

Benutzer-Avatar
Aylen

Zum Umbenennen der Spalten hier ist die einfache, die für beide funktioniert Default(0,1,2,etc;) und vorhandene Spalten, aber nicht sehr nützlich für größere Datensätze (mit vielen Spalten).

Für einen größeren Datensatz können wir die benötigten Spalten aufteilen und den folgenden Code anwenden:

df.columns = ['new_name','new_name1','old_name']

  • df.rename({‘two’:’new_name’}, axis=’columns’) Löst TypeError aus: Kann nicht sowohl ‘axis’ als auch ‘index’ oder ‘columns’ angeben.

    – Hier hier

    30. Dezember 2017 um 23:37 Uhr


  • @HereHere Stellen Sie sicher, dass Sie die Pandas-Version 0.21 verwenden. Tun pd.__version__ um Ihre Version zu überprüfen

    – Ted Petrou

    30. Dezember 2017 um 23:49 Uhr

Benutzer-Avatar
Malakai

Pandas-Version 0.23.4

df.rename(index=str,columns={'old_name':'new_name'},inplace=True)

Für das Protokoll:

das Weglassen von index=str führt zu einem Fehler ersetzen hat ein unerwartetes Argument ‘Spalten’

  • Dies erstreckt sich gut über mehr als eine Spalte: Wenn Sie eine Liste der haben old_names und die new-names (eins zu eins), dann können Sie Folgendes tun: df.rename(columns=dict(zip(old_names, new_names)), inplace=True)

    – Colin

    3. September 2021 um 8:58 Uhr


1054020cookie-checkÄndern eines bestimmten Spaltennamens in pandas DataFrame [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy