145 votes

Les pandas pourraient-ils utiliser la colonne comme index?

J'ai un tableur comme ceci:

 Locality    2005    2006    2007    2008    2009

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

Je ne veux pas échanger manuellement la colonne avec la ligne. Pourrait-il être possible d’utiliser des pandas lisant des données dans une liste comme celle-ci:

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

268voto

Michael Hoff Points 3196

Oui, avec set_index, vous pouvez faire de Locality votre index de lignes.

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

Si inplace=True n'est pas fourni, set_index renvoie la trame de données modifiée.

Exemple:

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

13voto

famargar Points 683

Vous pouvez modifier l'index comme expliqué déjà en utilisant set_index . Vous n'avez pas besoin d'échanger manuellement les lignes avec les colonnes, il existe une méthode de transposition ( data.T ) dans les pandas qui le fait pour vous:

 > 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
 

alors vous pouvez récupérer les valeurs de la colonne dataframe et les transformer en une liste:

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

[427000, 448000]
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X