Skip to content

pandas: Vorhandene Spalte dem DataFrame-Index mit set_index() zuweisen

Python

Durch die Verwendung von set_index() can SIE Eine vorhandene Spalte von pandas.DataFrame dem Index (Zeilenbezeichnung) zuweisen. Das Festlegen eines eindeutigen Namens für den Index unterstützt die Auswahl von Elementen mit loc und at.

Dieser Artikel hat folgenden Inhalt.

  • Also verwenden Sie set_index()
    • Grundlegende Verwendung
    • Behalten Sie die angegebene Spalte bei:drop
    • Multi-Index-Zuständig
    • Behalten Sie den ursprünglichen Index als Spalte bei
    • Originalobjekt ändern:inplace
  • Index beim Lesen der CSV-Datei setzen
  • Wählen Sie Zeilen und Elemente mit Index aus

Im following Artikel erfahren Sie, wie SIE den Index umbenennen, anstatt dem Index eine vorhandene Spalte zuzuweisen.

Die folgenden Daten werden als Beispiel verwendet.

import pandas as pd

df = pd.read_csv('data/src/sample_pandas_normal.csv')
print(df)
#       name  age state  point
# 0    Alice   24    NY     64
# 1      Bob   42    CA     92
# 2  Charlie   18    CA     70
# 3     Dave   68    TX     70
# 4    Ellen   24    CA     88
# 5    Frank   30    NY     57

Also verwenden Sie set_index()

Grundlegende Verwendung

Geben SIE den Namen der Spalte an, sterben als Index in den ersten Argumentschlüsseln used Werden soll.

df_i = df.set_index('name')
print(df_i)
#          age state  point
# name                     
# Alice     24    NY     64
# Bob       42    CA     92
# Charlie   18    CA     70
# Dave      68    TX     70
# Ellen     24    CA     88
# Frank     30    NY     57

Behalten Sie die angegebene Spalte bei: :drop

Standardmäßig wird die angegebene Spalte gelöscht, wie im Beispiel gezeigt. If das Argument drop auf False gesetzt IST, WIRD die angegebene Spalte auf index gesetzt und in der Datenspalte verleibt.

df_id = df.set_index('name', drop=False)
print(df_id)
#             name  age state  point
# name                              
# Alice      Alice   24    NY     64
# Bob          Bob   42    CA     92
# Charlie  Charlie   18    CA     70
# Dave        Dave   68    TX     70
# Ellen      Ellen   24    CA     88
# Frank      Frank   30    NY     57

Multi-Index-Zuständig

Durch die Verwendung von set_index() können mehrere Spalten als Multi-Index zugewiesen werden.

Nach Liste angeben

Durch die Angabe einer Liste von Spaltennamen in den ersten Argumentschlüsseln werden mehrere Spalten als Multi-Index zugewiesen.

df_mi = df.set_index(['state', 'name'])
print(df_mi)
#                age  point
# state name               
# NY    Alice     24     64
# CA    Bob       42     92
#       Charlie   18     70
# TX    Dave      68     70
# CA    Ellen     24     88
# NY    Frank     30     57

Durch das Sortieren mit sort_index() WIRD es ordentlich angezeigt.

df_mi.sort_index(inplace=True)
print(df_mi)
#                age  point
# state name               
# CA    Bob       42     92
#       Charlie   18     70
#       Ellen     24     88
# NY    Alice     24     64
#       Frank     30     57
# TX    Dave      68     70

Im following Artikel FINDEN SIE Laptops zum Sortieren mit sort_values() und sort_index().

Fügen Sie dem Mehrfachindex eine Spalte hinzu:append

Standardmäßig wird durch die Angabe einer neuen Spalte mit set_index() der ursprüngliche Index gelöscht.

print(df_i)
#          age state  point
# name                     
# Alice     24    NY     64
# Bob       42    CA     92
# Charlie   18    CA     70
# Dave      68    TX     70
# Ellen     24    CA     88
# Frank     30    NY     57

df_ii = df_i.set_index('state')
print(df_ii)
#        age  point
# state            
# NY      24     64
# CA      42     92
# CA      18     70
# TX      68     70
# CA      24     88
# NY      30     57

If das Argument append auf True gesetzt IST, WIRD die definierte Spalte als neuer Ebenenindex hinzugefügt.

df_mi = df_i.set_index('state', append=True)
print(df_mi)
#                age  point
# name    state            
# Alice   NY      24     64
# Bob     CA      42     92
# Charlie CA      18     70
# Dave    TX      68     70
# Ellen   CA      24     88
# Frank   NY      30     57

Die hinzugefügte Spalte WIRD auf die niedrigste Ebene gesetzt. Wenn Sie Ebenen tauschen möchten, verwenden Sie swaplevel().

print(df_mi.swaplevel(0, 1))
#                age  point
# state name               
# NY    Alice     24     64
# CA    Bob       42     92
#       Charlie   18     70
# TX    Dave      68     70
# CA    Ellen     24     88
# NY    Frank     30     57

Behalten Sie den ursprünglichen Index als Spalte bei

Wenn Sie wie in den bisherigen Beispielen eine Spalte mit set_index() auf Index setzen, wird der ursprüngliche Index gelöscht.

Wenn SIE den ursprünglichen Index als Spalte beibehalten möchten, verwenden SIE reset_index(), um den Index einer fortlaufenden Nummer zuzuweisen, sterben bei 0 beginnt.

print(df_i)
#          age state  point
# name                     
# Alice     24    NY     64
# Bob       42    CA     92
# Charlie   18    CA     70
# Dave      68    TX     70
# Ellen     24    CA     88
# Frank     30    NY     57

df_ri = df_i.reset_index()
print(df_ri)
#       name  age state  point
# 0    Alice   24    NY     64
# 1      Bob   42    CA     92
# 2  Charlie   18    CA     70
# 3     Dave   68    TX     70
# 4    Ellen   24    CA     88
# 5    Frank   30    NY     57

Sie können den Index in eine andere Spalte ändern, ohne dass Sie set_index() nach reset_index() verwenden.

df_change = df_i.reset_index().set_index('state')
print(df_change)
#           name  age  point
# state                     
# NY       Alice   24     64
# CA         Bob   42     92
# CA     Charlie   18     70
# TX        Dave   68     70
# CA       Ellen   24     88
# NY       Frank   30     57

Siehe auch den following Artikel für reset_index().

Originalobjekt ändern:inplace

Standardmäßig ändert set_index() das ursprüngliche Objekt nicht und gibt ein neues Objekt zurück, aber wenn das Argument inplace auf True gesetzt ist, wird das ursprüngliche Objekt geändert.

df.set_index('name', inplace=True)
print(df)
#          age state  point
# name                     
# Alice     24    NY     64
# Bob       42    CA     92
# Charlie   18    CA     70
# Dave      68    TX     70
# Ellen     24    CA     88
# Frank     30    NY     57

Index beim Lesen der CSV-Datei setzen

Wenn beim Lesen aus einer CSV-Datei pandas.DataFrame oder pandas.Series generiert WIRD und die Originaldatei eine Spalte enthält, die als Index verwendet werden soll, can this auch beim Lesen angegeben Werden.

Beim Lesen einer Datei mit read_csv() setzt die Angabe der Spaltennummer im Argument index_col diese Spalte auf den Index.。

df = pd.read_csv('data/src/sample_pandas_normal.csv', index_col=0)
print(df)
#          age state  point
# name                     
# Alice     24    NY     64
# Bob       42    CA     92
# Charlie   18    CA     70
# Dave      68    TX     70
# Ellen     24    CA     88
# Frank     30    NY     57

Wählen Sie Zeilen und Elemente mit Index aus

Wenn Sie wie in den Beispielen eindeutige Namen für den Index angeben, können Sie Zeilen und Elemente einfach anhand des Namens auswählen.

print(df)
#          age state  point
# name                     
# Alice     24    NY     64
# Bob       42    CA     92
# Charlie   18    CA     70
# Dave      68    TX     70
# Ellen     24    CA     88
# Frank     30    NY     57

print(df.loc['Bob'])
# age      42
# state    CA
# point    92
# Name: Bob, dtype: object

print(df.at['Bob', 'age'])
# 42

Weitere Informationen zu loc und at finden Sie im following Artikel.