O pandas poderia usar a coluna como índice?

114

Eu tenho uma planilha como esta:

Locality    2005    2006    2007    2008    2009

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

Não quero trocar manualmente a coluna pela linha. Seria possível usar pandas lendo dados para uma lista como esta:

data['ABBOTSFORD']=[427000,448000,602500,600000,638500]
data['ABERFELDIE']=[534000,600000,735000,710000,775000]
data['AIREYS INLET']=[459000,440000,430000,517500,512500]
Chan Austin
fonte
Possível duplicata de Redefining the Index em um objeto Pandas DataFrame
Toothpick Anemone
5
Eu discordo. Mesmo que a essência da pergunta seja semelhante (e, portanto, também a resposta seja), as pessoas procurarão algo como esta pergunta quando quiserem 'fazer uma coluna para o índice'.
Michael Hoff

Respostas:

222

Sim, com set_index você pode fazer Localityseu índice de linha.

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

Se inplace=Truenão for fornecido, set_indexretorna o dataframe modificado como resultado.

Exemplo:

> 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
fonte
13

Você pode alterar o índice conforme explicado já usando set_index. Você não precisa trocar manualmente as linhas com as colunas, existe um data.Tmétodo transpose ( ) no pandas que faz isso para você:

> 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

então você pode buscar os valores da coluna do dataframe e transformá-los em uma lista:

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

[427000, 448000]
famargar
fonte
3

Você pode definir o índice da coluna usando o parâmetro index_col disponível durante a leitura da planilha no Pandas.

Aqui está minha solução:

  1. Em primeiro lugar, importe os pandas como pd: import pandas as pd

  2. Leia o nome do arquivo usando pd.read_excel () (se você tiver seus dados em uma planilha) e defina o índice para 'Localidade' especificando o parâmetro index_col.

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

    Neste estágio, se você receber um erro 'nenhum módulo chamado xlrd', instale-o usando pip install xlrd.

  3. Para inspeção visual, leia o dataframe usando df.head() qual imprimirá a seguinte saída sc

  4. Agora você pode buscar os valores das colunas desejadas do dataframe e imprimi-lo

    sc2

Steffi Keran Rani J
fonte