Ich habe einen Datenrahmen namens data
. Wie würde ich den einzigen Spaltenkopf umbenennen? Zum Beispiel gdp
zu log(gdp)
?
data =
y gdp cap
0 1 2 5
1 2 3 9
2 8 7 2
3 3 4 7
4 6 7 7
5 4 8 3
6 8 2 8
7 9 9 10
8 6 6 4
9 10 10 7
Antworten:
Die
rename
Show, dass es ein Diktat als Parameter akzeptiert,columns
so dass Sie nur ein Diktat mit einem einzigen Eintrag übergeben.Siehe auch verwandte
quelle
inplace
Parameter. Wenn dieser Parameter ignoriert wird, ist dies ein Fehler. Können Sie Timings mit und ohne Parameter durchführen, versuchen Sie auch so etwasnew_df = df.rename(columns={'new_name':'old_name'})
und sehen Sie, ob dies der Fall ist ist schneller oder nichtinplace
Parameters wurde die Zeit von 14 Sekunden auf 26 Sekunden fast verdoppelt. Aber 14 Sekunden noch eine ziemlich lange Zeit, nur um den Header zu ändern ..Eine viel schnellere Implementierung wäre die Verwendung,
list-comprehension
wenn Sie eine einzelne Spalte umbenennen müssen.Wenn mehrere Spalten umbenannt werden müssen, verwenden Sie entweder bedingte Ausdrücke wie:
Oder erstellen Sie eine Zuordnung mit a
dictionary
und führenlist-comprehension
Sie dieget
Operation mit der Operation aus, indem Sie den Standardwert als alten Namen festlegen:Timings:
quelle
pd.merge_asof()
weil es sich um einen Ausdruck handelt :(.Ab Version 0.24 + können Sie jeweils eine (oder mehrere) Spalten umbenennen.
DataFrame.rename()
mitaxis=1
oderaxis='columns'
(dasaxis
Argument wurde in eingeführtv0.21
.Index.str.replace()
für String / Regex-basierten Ersatz.Wenn Sie ALLE Spalten gleichzeitig umbenennen müssen,
DataFrame.set_axis()
Methode mitaxis=1
. Übergeben Sie eine listenartige Sequenz. Optionen für die direkte Änderung sind ebenfalls verfügbar.rename
mitaxis=1
Ab 0,21 können Sie jetzt einen
axis
Parameter angeben mitrename
:(Beachten Sie, dass dies
rename
nicht standardmäßig vorhanden ist, sodass Sie das Ergebnis zurückweisen müssen .)Dieser Zusatz wurde vorgenommen, um die Konsistenz mit dem Rest der API zu verbessern. Das neue
axis
Argument ist analog zumcolumns
Parameter - sie machen dasselbe.rename
Akzeptiert auch einen Rückruf, der für jede Spalte einmal aufgerufen wird.Für dieses spezielle Szenario möchten Sie verwenden
Index.str.replace
Ähnlich wie bei der
replace
Methode der Zeichenfolgen in Python definieren pandas Index und Series (nur Objekttyp) eine ("vektorisierte")str.replace
Methode für das Ersetzen von Zeichenfolgen und Regex.Dies hat gegenüber den anderen Methoden den Vorteil, dass
str.replace
Regex unterstützt wird (standardmäßig aktiviert). Weitere Informationen finden Sie in den Dokumenten.Übergeben einer Liste an
set_axis
mitaxis=1
Rufen Sie
set_axis
mit einer Liste von Headern an. Die Liste muss der Spalten- / Indexgröße entsprechen.set_axis
mutiert standardmäßig den ursprünglichen DataFrame, Sie können jedoch angebeninplace=False
, dass eine geänderte Kopie zurückgegeben werden soll.Hinweis: In zukünftigen Versionen
inplace
wird standardmäßig verwendetTrue
.Methodenverkettung
Warum wählen,
set_axis
wenn wir bereits eine effiziente Möglichkeit haben, Spalten zuzuweisendf.columns = ...
? Wie von Ted Petrou in [dieser Antwort] gezeigt ( https://stackoverflow.com/a/46912050/4909087 )set_axis
hilfreich, wenn Sie versuchen, Methoden zu verketten.Vergleichen Sie
Gegen
Ersteres ist eine natürlichere und frei fließende Syntax.
quelle
Es gibt mindestens fünf verschiedene Möglichkeiten, bestimmte Spalten in Pandas umzubenennen, und ich habe sie unten zusammen mit Links zu den ursprünglichen Antworten aufgelistet. Ich habe diese Methoden auch zeitlich festgelegt und festgestellt, dass sie ungefähr gleich funktionieren (obwohl YMMV von Ihrem Datensatz und Szenario abhängt). Der Testfall ist unten Spalten zu umbenennen ,
A
M
N
Z
umA2
M2
N2
Z2
in einem Datenrahmen mit SpaltenA
aufZ
eine Million Zeilen enthalten.Ausgabe:
Verwenden Sie die Methode, die für Sie am intuitivsten und für Sie am einfachsten in Ihrer Anwendung zu implementieren ist.
quelle