412 Stimmen

Wie kann man einen pandas-Index-Spalten-Titel oder Namen erhalten/setzen?

Wie bekomme ich den Spaltennamen des Index in Pandas in Python? Hier ist ein Beispiel-DataFrame:

             Column 1
Index Title          
Apples              1
Oranges             2
Puppies             3
Ducks               4  

Was ich versuche, ist den Titel des Index im DataFrame zu erhalten/setzen. Hier ist was ich versucht habe:

import pandas as pd

data = {'Column 1'   : [1., 2., 3., 4.], 
        'Index Title': ["Apples", "Oranges", "Puppies", "Ducks"]}
df = pd.DataFrame(data)
df.index = df["Index Title"]
del df["Index Title"]

Weiß jemand, wie man das macht?

16voto

dusio Punkte 410

Das festlegen des Indexnamens kann auch bei der Erstellung erfolgen:

pd.DataFrame(data={'age': [10,20,30], 'height': [100, 170, 175]}, index=pd.Series(['a', 'b', 'c'], name='Tag'))

6voto

pnv Punkte 1337

df.columns.values geben uns auch die Spaltennamen

4voto

The Unfun Cat Punkte 26313

Die Lösung für Multi-Indizes befindet sich in jezraels zyclopädischer Antwort, aber es hat eine Weile gedauert, bis ich sie gefunden habe, also poste ich eine neue Antwort:

df.index.names gibt die Namen eines Multi-Index (als Frozenlist) an.

2voto

totalhack Punkte 1650

Um nur die Spaltennamen des Index zu erhalten, funktioniert df.index.names sowohl für einen einzelnen Index als auch für einen MultiIndex in der neuesten Version von Pandas.

Als jemand, der dies gefunden hat, während er versuchte, die beste Methode zu finden, um eine Liste von Indexnamen + Spaltennamen zu erhalten, hätte ich diese Antwort nützlich gefunden:

names = list(filter(None, df.index.names + df.columns.values.tolist()))

Dies funktioniert für keinen Index, einzelnen Spaltenindex oder MultiIndex. Es vermeidet den Aufruf von reset_index(), was bei einer so einfachen Operation zu einer unnötigen Leistungsbeeinträchtigung führt. Ich bin überrascht, dass es dafür keine integrierte Methode gibt (die ich kenne). Ich denke, ich stoße öfter darauf, weil ich Daten zwischen Datenbanken hin- und herbewege, wobei der Index des Datenrahmens auf einen Primär-/Unique-Key abgebildet wird, aber für mich nur eine weitere Spalte ist.

0voto

not a robot Punkte 3525
1. Verwenden Sie pd.Index, um einen Index (oder eine Spalte) beim Aufbau zu benennen

Pandas verfügt über Index (MultiIndex) Objekte, die Namen akzeptieren. Durch das Übergeben dieser als Index oder Spalte beim Dataframe-Aufbau werden Frames mit benannten Indizes/Spalten erstellt.

data = {'Column 1': [1,2,3,4], 'Index Title': ["Äpfel","Orangen","Welpen","Enten"]}

# für RangeIndex
df = pd.DataFrame(data, index=pd.Index(range(4), name='foo'))
#                             ^^^^^^^^  <---- hier

# für Index
df = pd.DataFrame(data, index=pd.Index(data['Index Title'], name='foo'))
#                             ^^^^^^^^  <---- hier

# für Spalten
df = pd.DataFrame(data, columns=pd.Index(data.keys(), name='foo'))
#                               ^^^^^^^^  <---- hier

# für MultiIndex
df = pd.DataFrame(data, index=pd.MultiIndex.from_arrays([['Obst', 'Obst', 'Tier', 'Tier'], data['Index Title']], names=['foo', 'bar']))
#                             ^^^^^^^^^^^^^  <---- hier
2. Ändern Sie den Namen des MultiIndex-Level

Wenn das Dataframe einen MultiIndex hat und der Name eines Index auf einer bestimmten Ebene geändert werden muss, kann index.set_names verwendet werden. Um beispielsweise den Namen der zweiten Indexebene zu ändern, verwenden Sie das folgende. Vergessen Sie nicht inplace=True.

df.index.set_names('foo', level=1, inplace=True)

# alternativ könnte 'rename' mit einem Dict verwendet werden
df.index.rename({'Index Title 2': 'foo'}, inplace=True)

res1


set_names kann auch für einfachen Index verwendet werden (setze level=None). Allerdings ist rename_axis wahrscheinlich einfacher.

df.index.set_names('foo', level=None, inplace=True)

# äquivalent zu folgendem
df.index.name = 'foo'
df = df.rename_axis('foo')

res2


Es gibt eine entsprechende columns.set_names für Spalten.

df.columns.set_names('foo', level=None, inplace=True)
# äquivalent zu 
df = df.rename_axis(columns='foo')

# für MultiIndex-Spalten
df.columns.set_names('foo', level=0, inplace=True)

res3

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X