Czy pandy mogą używać kolumny jako indeksu?

114

Mam taki arkusz kalkulacyjny:

Locality    2005    2006    2007    2008    2009

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

Nie chcę ręcznie zamieniać kolumny z wierszem. Czy byłoby możliwe użycie pand odczytujących dane do listy w ten sposób:

data['ABBOTSFORD']=[427000,448000,602500,600000,638500]
data['ABERFELDIE']=[534000,600000,735000,710000,775000]
data['AIREYS INLET']=[459000,440000,430000,517500,512500]
Chan Austin
źródło
Możliwy duplikat przedefiniowania indeksu w obiekcie Pandas DataFrame
Wykałaczka Anemone
5
Nie zgodziłbym się. Chociaż istota pytania jest podobna (a zatem również odpowiedź brzmi), ludzie będą szukać czegoś takiego, jak to pytanie, gdy chcą „utworzyć kolumnę w indeksie”.
Michael Hoff,

Odpowiedzi:

222

Tak, za pomocą set_index możesz utworzyć Localityindeks wiersza.

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

Jeśli inplace=Truenie jest podana, set_indexzwraca jako wynik zmodyfikowaną ramkę danych.

Przykład:

> 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
źródło
13

Możesz zmienić indeks, jak wyjaśniono już przy użyciu set_index. Nie musisz ręcznie zamieniać wierszy z kolumnami, data.Tw pandach jest metoda transpose ( ), która robi to za Ciebie:

> 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

następnie możesz pobrać wartości z kolumny dataframe i przekształcić je w listę:

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

[427000, 448000]
famargar
źródło
3

Możesz ustawić indeks kolumny za pomocą parametru index_col dostępnego podczas czytania z arkusza kalkulacyjnego w Pandas.

Oto moje rozwiązanie:

  1. Po pierwsze, zaimportuj pandy jako pd: import pandas as pd

  2. Wczytaj nazwę pliku za pomocą pd.read_excel () (jeśli masz dane w arkuszu kalkulacyjnym) i ustaw indeks na „Lokalność”, określając parametr index_col.

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

    Jeśli na tym etapie pojawi się błąd „brak modułu o nazwie xlrd”, zainstaluj go za pomocą pip install xlrd.

  3. W celu oględzin, przeczytaj ramkę danych, za pomocą df.head()której wydrukuje się następujący wynik sc

  4. Teraz możesz pobrać wartości żądanych kolumn ramki danych i wydrukować je

    sc2

Steffi Keran Rani J
źródło