Ich habe eine CSV-Datei ohne Header mit einem DateTime-Index. Ich möchte den Index und den Spaltennamen umbenennen, aber mit df.rename () wird nur der Spaltenname umbenannt. Fehler? Ich bin auf Version 0.12.0
In [2]: df = pd.read_csv(r'D:\Data\DataTimeSeries_csv//seriesSM.csv', header=None, parse_dates=[[0]], index_col=[0] )
In [3]: df.head()
Out[3]:
1
0
2002-06-18 0.112000
2002-06-22 0.190333
2002-06-26 0.134000
2002-06-30 0.093000
2002-07-04 0.098667
In [4]: df.rename(index={0:'Date'}, columns={1:'SM'}, inplace=True)
In [5]: df.head()
Out[5]:
SM
0
2002-06-18 0.112000
2002-06-22 0.190333
2002-06-26 0.134000
2002-06-30 0.093000
2002-07-04 0.098667
rename_axis
Methode zu erhalten.df.rename_axis("Date", axis='index', inplace=True)
gemäß der Dokumentation pandas.pydata.org/pandas-docs/stable/generated/… oderdf.index.names = ['Date']
Antworten:
Das
rename
Verfahren nimmt ein Wörterbuch für den Index, der Index gilt Werte .Sie möchten den Namen der Indexebene umbenennen:
Eine gute Möglichkeit, darüber nachzudenken, besteht darin, dass Spalten und Index vom selben Objekttyp (
Index
oderMultiIndex
) sind und Sie die beiden über die Transponierung austauschen können.Dies ist etwas verwirrend, da die Indexnamen eine ähnliche Bedeutung wie Spalten haben. Hier einige weitere Beispiele:
Sie können die Umbenennung im Index sehen, wodurch sich der Wert 1 ändern kann :
Beim Umbenennen der Ebenennamen:
Hinweis: Dieses Attribut ist nur eine Liste, und Sie können das Umbenennen als Listenverständnis / Karte durchführen.
quelle
"inplace =True"
,df1.rename
nicht wirklich etwas ändern würde.In der aktuell ausgewählten Antwort wird die
rename_axis
Methode nicht erwähnt, mit der die Index- und Spaltenebenen umbenannt werden können.Pandas hat einige Eigenheiten, wenn es darum geht, die Ebenen des Index umzubenennen. Es gibt auch eine neue DataFrame-Methode
rename_axis
zum Ändern der Namen auf Indexebene .Schauen wir uns einen DataFrame an
Dieser DataFrame hat eine Ebene für jeden Zeilen- und Spaltenindex. Sowohl der Zeilen- als auch der Spaltenindex haben keinen Namen. Lassen Sie uns den Namen der Zeilenindexebene in 'Namen' ändern.
Die
rename_axis
Methode hat auch die Möglichkeit, die Namen der Spaltenebene durch Ändern desaxis
Parameters zu ändern :Wenn Sie den Index mit einigen Spalten festlegen, wird der Spaltenname zum neuen Namen auf Indexebene. Fügen wir an die Indexebenen unseres ursprünglichen DataFrame hinzu:
Beachten Sie, dass der ursprüngliche Index keinen Namen hat. Wir können weiterhin
rename_axis
eine Liste mit der gleichen Länge wie die Anzahl der Indexebenen verwenden , müssen diese jedoch übergeben.Sie können
None
damit die Namen der Indexebenen effektiv löschen.Serien funktionieren ähnlich, aber mit einigen Unterschieden
Erstellen wir eine Serie mit drei Indexstufen
Wir können
rename_axis
ähnlich wie bei DataFrames verwendenBeachten Sie, dass sich unterhalb der aufgerufenen Serie ein zusätzliches Stück Metadaten befindet
Name
. Beim Erstellen einer Serie aus einem DataFrame wird dieses Attribut auf den Spaltennamen festgelegt.Wir können der
rename
Methode einen Zeichenfolgennamen übergeben , um ihn zu ändernDataFrames haben dieses Attribut nicht und infact löst bei dieser Verwendung eine Ausnahme aus
Vor Pandas 0.21 hätten Sie
rename_axis
die Werte im Index und in den Spalten umbenennen können. Es ist veraltet, also tu das nichtquelle
df1 = df.set_index(['state', 'color'], append=True)
mitdf1.rename_axis(['names', None, 'Colors'])
?Für neuere
pandas
Versionenoder
Letzteres ist erforderlich, wenn ein Datenrahmen alle seine Eigenschaften beibehalten soll.
quelle
In Pandas Version 0.13 und höher sind die Namen der Indexebenen unveränderlich (Typ
FrozenList
) und können nicht mehr direkt festgelegt werden. Sie müssen zuerst die neuen IndexebenennamenIndex.rename()
auf den IndexDataFrame.reindex()
anwenden und dann den neuen Index auf den DataFrame anwenden. Beispiele:Für Pandas Version <0.13
Für Pandas Version> = 0.13
quelle
index
odercolumn
direkt ändert beide für mich (unter Pandas 0.19), jedoch nicht mit dieser Methode.Sie können auch
Index.set_names
Folgendes verwenden:quelle
multiIndex
?MultiIndex(levels=[['A', 'B', 'C', 'D', 'E', 'F'], ['Y', 'Z']], labels=[[0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5], [0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1]], names=['Portfolio', None])
Ist es möglich , die umbenennenNone
zumeasures
?Wenn Sie dieselbe Zuordnung zum Umbenennen von Spalten und Index verwenden möchten, haben Sie folgende Möglichkeiten:
quelle
Ist der einzige, der den Job für mich macht (Pandas 0.22.0).
Ohne inplace = True ist der Name des Index in meinem Fall nicht festgelegt.
quelle
Sie können
index
undcolumns
Attribute von verwendenpandas.DataFrame
. HINWEIS: Die Anzahl der Elemente der Liste muss mit der Anzahl der Zeilen / Spalten übereinstimmen.quelle