web-dev-qa-db-fra.com

Sélection pandas colonne par emplacement)

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

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

Mais comment sélectionner une colonne par un entier?

Mon cadre de données:

df=pandas.DataFrame({'a':np.random.Rand(5), 'b':np.random.Rand(5)})
72
Jason Strimpel

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 maintenant obsolète. Les utilisateurs doivent passer à df.iloc[:,2].

111
DSM

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

Mise à jour: icol est obsolète et la même fonctionnalité peut être obtenue par:

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

Vous pouvez utiliser basé sur une étiquette utilisant .loc ou basé sur un index. Utilisant la méthode .iloc pour effectuer le découpage en 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
15
Surya

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
5
Safwan

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

df.transpose().ix[3]
1
Stefano Fedele