142 votes

Sélection d'une colonne pandas par emplacement

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

Vous pouvez sélectionner une ligne par emplacement en utilisant df.ix[3] .

Mais comment sélectionner une colonne par un nombre entier ?

Mon cadre de données :

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

209voto

DSM Points 71975

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

Modifier : 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] .

64voto

Adrian Points 419

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

Mise à jour : icol est déprécié et la même fonctionnalité peut être obtenue par :

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

26voto

Surya Points 4152

Vous pourriez utiliser Basé sur les étiquettes en utilisant la méthode .loc ou basé sur les index en utilisant la méthode .iloc pour faire 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

8voto

Safwan Points 1028

Vous pouvez accéder à plusieurs colonnes en passant une liste d'indices de colonnes à la commande 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

2voto

Stefano Fedele Points 1163

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

df.transpose().ix[3]

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