I panda potrebbero usare la colonna come indice?


114

Ho un foglio di calcolo come questo:

Locality    2005    2006    2007    2008    2009

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

Non voglio scambiare manualmente la colonna con la riga. Potrebbe essere possibile utilizzare i panda che leggono i dati in un elenco come questo:

data['ABBOTSFORD']=[427000,448000,602500,600000,638500]
data['ABERFELDIE']=[534000,600000,735000,710000,775000]
data['AIREYS INLET']=[459000,440000,430000,517500,512500]


5
Non sarei d'accordo. Anche se l'essenza della domanda è simile (e quindi anche la risposta è), le persone cercheranno qualcosa di simile a questa domanda quando vogliono "creare una colonna per l'indice".
Michael Hoff

Risposte:


222

Sì, con set_index puoi rendere la Localitytua riga index.

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

Se inplace=Truenon viene fornito, set_indexrestituisce come risultato il dataframe modificato.

Esempio:

> 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]

13

È possibile modificare l'indice come spiegato già utilizzando set_index. Non è necessario scambiare manualmente le righe con le colonne, esiste un data.Tmetodo transpose ( ) in panda che lo fa per te:

> 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

quindi puoi recuperare i valori della colonna del dataframe e trasformarli in un elenco:

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

[427000, 448000]

3

Puoi impostare l'indice della colonna utilizzando il parametro index_col disponibile durante la lettura dal foglio di calcolo in Pandas.

Ecco la mia soluzione:

  1. In primo luogo, importa i panda come pd: import pandas as pd

  2. Leggere il nome del file utilizzando pd.read_excel () (se i dati sono presenti in un foglio di calcolo) e impostare l'indice su "Località" specificando il parametro index_col.

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

    In questa fase, se ricevi un errore "nessun modulo denominato xlrd", installalo utilizzando pip install xlrd.

  3. Per l'ispezione visiva, leggere il dataframe utilizzando il df.head()quale stamperà il seguente output sc

  4. Ora puoi recuperare i valori delle colonne desiderate del dataframe e stamparlo

    SC2

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.