Könnten Pandas eine Spalte als Index verwenden?

113

Ich habe eine Tabelle wie diese:

Locality    2005    2006    2007    2008    2009

ABBOTSFORD  427000  448000  602500  600000  638500
ABERFELDIE  534000  600000  735000  710000  775000
AIREYS INLET459000  440000  430000  517500  512500

Ich möchte die Spalte nicht manuell mit der Zeile austauschen. Könnte es möglich sein, Pandas zu verwenden, die Daten in einer Liste wie folgt lesen:

data['ABBOTSFORD']=[427000,448000,602500,600000,638500]
data['ABERFELDIE']=[534000,600000,735000,710000,775000]
data['AIREYS INLET']=[459000,440000,430000,517500,512500]
Chan Austin
quelle
Mögliches Duplikat der Neudefinition des Index in einem Pandas DataFrame-Objekt
Zahnstocher-Anemone
5
Ich würde nicht zustimmen. Obwohl das Wesentliche der Frage ähnlich ist (und daher auch die Antwort lautet), suchen die Benutzer nach so etwas wie dieser Frage, wenn sie eine Spalte zum Index erstellen möchten.
Michael Hoff

Antworten:

221

Ja, mit set_index können Sie LocalityIhren Zeilenindex erstellen .

data.set_index('Locality', inplace=True)

Wenn inplace=Truenicht angegeben, wird set_indexder geänderte Datenrahmen als Ergebnis zurückgegeben.

Beispiel:

> import pandas as pd
> df = pd.DataFrame([['ABBOTSFORD', 427000, 448000],
                     ['ABERFELDIE', 534000, 600000]],
                    columns=['Locality', 2005, 2006])

> df
     Locality    2005    2006
0  ABBOTSFORD  427000  448000
1  ABERFELDIE  534000  600000

> df.set_index('Locality', inplace=True)
> df
              2005    2006
Locality                  
ABBOTSFORD  427000  448000
ABERFELDIE  534000  600000

> df.loc['ABBOTSFORD']
2005    427000
2006    448000
Name: ABBOTSFORD, dtype: int64

> df.loc['ABBOTSFORD'][2005]
427000

> df.loc['ABBOTSFORD'].values
array([427000, 448000])

> df.loc['ABBOTSFORD'].tolist()
[427000, 448000]
Michael Hoff
quelle
13

Sie können den Index wie bereits erläutert ändern set_index. Sie müssen Zeilen nicht manuell mit Spalten data.Taustauschen. In Pandas gibt es eine transpose ( ) -Methode, die dies für Sie erledigt:

> df = pd.DataFrame([['ABBOTSFORD', 427000, 448000],
                    ['ABERFELDIE', 534000, 600000]],
                    columns=['Locality', 2005, 2006])

> newdf = df.set_index('Locality').T
> newdf

Locality    ABBOTSFORD  ABERFELDIE
2005        427000      534000
2006        448000      600000

Anschließend können Sie die Datenrahmenspaltenwerte abrufen und in eine Liste umwandeln:

> newdf['ABBOTSFORD'].values.tolist()

[427000, 448000]
Famargar
quelle
3

Sie können den Spaltenindex mithilfe des Parameters index_col festlegen , der beim Lesen aus der Tabelle in Pandas verfügbar ist.

Hier ist meine Lösung:

  1. Importieren Sie zunächst Pandas als pd: import pandas as pd

  2. Lesen Sie den Dateinamen mit pd.read_excel () ein (wenn Sie Ihre Daten in einer Tabelle haben) und setzen Sie den Index durch Angabe des Parameters index_col auf 'Lokalität'.

    df = pd.read_excel('testexcel.xlsx', index_col=0)

    Wenn in diesem Stadium der Fehler "Kein Modul mit dem Namen xlrd" angezeigt wird, installieren Sie ihn mit pip install xlrd.

  3. Lesen Sie zur visuellen Überprüfung den Datenrahmen, mit df.head()dem die folgende Ausgabe gedruckt wird sc

  4. Jetzt können Sie die Werte der gewünschten Spalten des Datenrahmens abrufen und drucken

    sc2

Steffi Keran Rani J.
quelle