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)})
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]
.
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
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
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
La méthode .transpose () convertit les colonnes en lignes et les lignes en colonnes, vous pouvez même écrire
df.transpose().ix[3]