Sélection de la colonne pandas par emplacement


101

J'essaie simplement d'accéder aux colonnes pandas nommées par un entier.

Vous pouvez sélectionner une ligne par emplacement à l'aide de df.ix[3].

Mais comment sélectionner une colonne par entier?

Mon dataframe:

df=pandas.DataFrame({'a':np.random.rand(5), 'b':np.random.rand(5)})

Mis à jour pour poser une question.
Jason Strimpel

Dans cet exemple, l'ordre des colonnes peut ne pas être défini. («a» peut être la première ou la deuxième colonne).
user48956

Réponses:


152

Deux approches qui me viennent à l'esprit:

>>> df
          A         B         C         D
0  0.424634  1.716633  0.282734  2.086944
1 -1.325816  2.056277  2.583704 -0.776403
2  1.457809 -0.407279 -1.560583 -1.316246
3 -0.757134 -1.321025  1.325853 -2.513373
4  1.366180 -1.265185 -2.184617  0.881514
>>> df.iloc[:, 2]
0    0.282734
1    2.583704
2   -1.560583
3    1.325853
4   -2.184617
Name: C
>>> df[df.columns[2]]
0    0.282734
1    2.583704
2   -1.560583
3    1.325853
4   -2.184617
Name: C

Edit : La réponse originale suggérait l'utilisation de df.ix[:,2]mais cette fonction est désormais obsolète. Les utilisateurs doivent passer à df.iloc[:,2].


28
FYI df.ix est maintenant remplacé par df.iloc
yosemite_k

Notez que si vous avez deux colonnes avec le même nom, la méthode df.iloc [:, 2] fonctionne, renvoyer une seule colonne mais la méthode df [df.columns [2]] renverra les deux colonnes avec le même nom.
BobbyG

54

Vous pouvez également utiliser df.icol(n)pour accéder à une colonne par nombre entier.

Mise à jour: icolest obsolète et la même fonctionnalité peut être obtenue en:

df.iloc[:, n]  # to access the column at the nth position

2
Notez que pour la prochaine version 0.11.0, ces méthodes sont obsolètes et peuvent être supprimées dans les versions futures. Voir pandas.pydata.org/pandas-docs/dev/… pour savoir comment sélectionner par position à l'aide d'iloc / iat.
Wouter Overmeire

1
Le lien ci-dessus est obsolète car les documents d'indexation ont depuis été restructurés: pandas.pydata.org/pandas-docs/stable/… . À ce jour, dans laquelle la version la plus récente est la 0.21.0, ilocreste l'approche documentée pour accéder à une colonne par position.
iff_or

21

Vous pouvez utiliser des libellés en utilisant .loc ou des index en utilisant la méthode .iloc pour effectuer le découpage des colonnes, y compris les plages de colonnes:

In [50]: import pandas as pd

In [51]: import numpy as np

In [52]: df = pd.DataFrame(np.random.rand(4,4), columns = list('abcd'))

In [53]: df
Out[53]: 
          a         b         c         d
0  0.806811  0.187630  0.978159  0.317261
1  0.738792  0.862661  0.580592  0.010177
2  0.224633  0.342579  0.214512  0.375147
3  0.875262  0.151867  0.071244  0.893735

In [54]: df.loc[:, ["a", "b", "d"]] ### Selective columns based slicing
Out[54]: 
          a         b         d
0  0.806811  0.187630  0.317261
1  0.738792  0.862661  0.010177
2  0.224633  0.342579  0.375147
3  0.875262  0.151867  0.893735

In [55]: df.loc[:, "a":"c"] ### Selective label based column ranges slicing
Out[55]: 
          a         b         c
0  0.806811  0.187630  0.978159
1  0.738792  0.862661  0.580592
2  0.224633  0.342579  0.214512
3  0.875262  0.151867  0.071244

In [56]: df.iloc[:, 0:3] ### Selective index based column ranges slicing
Out[56]: 
          a         b         c
0  0.806811  0.187630  0.978159
1  0.738792  0.862661  0.580592
2  0.224633  0.342579  0.214512
3  0.875262  0.151867  0.071244

6

Vous pouvez accéder à plusieurs colonnes en transmettant une liste d'index de colonne à dataFrame.ix.

Par exemple:

>>> df = pandas.DataFrame({
             'a': np.random.rand(5),
             'b': np.random.rand(5),
             'c': np.random.rand(5),
             'd': np.random.rand(5)
         })

>>> df
          a         b         c         d
0  0.705718  0.414073  0.007040  0.889579
1  0.198005  0.520747  0.827818  0.366271
2  0.974552  0.667484  0.056246  0.524306
3  0.512126  0.775926  0.837896  0.955200
4  0.793203  0.686405  0.401596  0.544421

>>> df.ix[:,[1,3]]
          b         d
0  0.414073  0.889579
1  0.520747  0.366271
2  0.667484  0.524306
3  0.775926  0.955200
4  0.686405  0.544421

1

La méthode .transpose () convertit les colonnes en lignes et les lignes en colonnes, vous pouvez donc même écrire

df.transpose().ix[3]

2
La transposition peut perturber les types de données.
IanS
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.