¿Podrían los pandas usar la columna como índice?

114

Tengo una hoja de cálculo 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

No quiero intercambiar manualmente la columna con la fila. ¿Podría ser posible usar pandas leyendo datos en una 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
fuente
Posible duplicado de la redefinición del índice en un objeto Pandas DataFrame
Toothpick Anemone
5
Yo no estaría de acuerdo. Aunque la esencia de la pregunta es similar (y por lo tanto también lo es la respuesta), las personas buscarán algo como esta pregunta cuando quieran "hacer una columna para el índice".
Michael Hoff

Respuestas:

222

Sí, con set_index puede hacer Localitysu índice de fila.

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

Si inplace=Trueno se proporciona, set_indexdevuelve el marco de datos modificado como resultado.

Ejemplo:

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

Puede cambiar el índice como ya se explicó usando set_index. No necesita intercambiar manualmente filas con columnas, hay un data.Tmétodo transpose ( ) en pandas que lo hace por usted:

> 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

luego puede obtener los valores de la columna del marco de datos y transformarlos en una lista:

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

[427000, 448000]
famargar
fuente
3

Puede establecer el índice de la columna usando el parámetro index_col disponible mientras lee una hoja de cálculo en Pandas.

Aquí está mi solución:

  1. En primer lugar, importe pandas como pd: import pandas as pd

  2. Lea el nombre del archivo usando pd.read_excel () (si tiene sus datos en una hoja de cálculo) y establezca el índice en 'Localidad' especificando el parámetro index_col.

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

    En esta etapa, si obtiene un error 'sin módulo llamado xlrd', instálelo usando pip install xlrd.

  3. Para una inspección visual, lea el marco de datos df.head()que imprimirá el siguiente resultado Carolina del Sur

  4. Ahora puede obtener los valores de las columnas deseadas del marco de datos e imprimirlo

    sc2

Steffi Keran Rani J
fuente