Les pandas pourraient-ils utiliser la colonne comme index?


114

J'ai une feuille de calcul comme celle-ci:

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 permuter manuellement la colonne avec la ligne. Serait-il possible d'utiliser des pandas lisant des données dans une liste comme ceci:

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


5
Je ne serais pas d’accord. Même si l'essence de la question est similaire (et donc aussi la réponse), les gens chercheront quelque chose comme cette question lorsqu'ils veulent «créer une colonne dans l'index».
Michael Hoff

Réponses:


222

Oui, avec set_index vous pouvez créer Localityvotre index de ligne.

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

Si inplace=Truen'est pas fourni, set_indexrenvoie le dataframe modifié en conséquence.

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]

13

Vous pouvez modifier l'index comme expliqué déjà en utilisant set_index. Vous n'avez pas besoin d'échanger manuellement des lignes avec des colonnes, il existe une data.Tméthode transpose ( ) dans 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

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

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

[427000, 448000]

3

Vous pouvez définir l'index de la colonne à l'aide du paramètre index_col disponible lors de la lecture à partir d'une feuille de calcul dans Pandas.

Voici ma solution:

  1. Tout d'abord, importez les pandas en tant que pd: import pandas as pd

  2. Lisez le nom de fichier en utilisant pd.read_excel () (si vous avez vos données dans une feuille de calcul) et définissez l'index sur 'Locality' en spécifiant le paramètre index_col.

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

    À ce stade, si vous obtenez une erreur «aucun module nommé xlrd», installez-le en utilisant pip install xlrd.

  3. Pour une inspection visuelle, lisez la trame de données à l'aide de df.head()laquelle imprimera la sortie suivante sc

  4. Vous pouvez maintenant récupérer les valeurs des colonnes souhaitées du dataframe et l'imprimer

    sc2

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.