À partir de la version 0.11.0, les colonnes peut être tranché de la manière dont vous avez essayé d'utiliser la fonction .loc
l'indexeur :
df.loc[:, 'C':'E']
est équivalent à
df[['C', 'D', 'E']] # or df.loc[:, ['C', 'D', 'E']]
et renvoie des colonnes C
par le biais de E
.
Une démo sur un DataFrame généré aléatoirement :
import pandas as pd
import numpy as np
np.random.seed(5)
df = pd.DataFrame(np.random.randint(100, size=(100, 6)),
columns=list('ABCDEF'),
index=['R{}'.format(i) for i in range(100)])
df.head()
Out:
A B C D E F
R0 99 78 61 16 73 8
R1 62 27 30 80 7 76
R2 15 53 80 27 44 77
R3 75 65 47 30 84 86
R4 18 9 41 62 1 82
Pour obtenir les colonnes de C à E (notez que contrairement au découpage en nombres entiers, 'E' est inclus dans les colonnes) :
df.loc[:, 'C':'E']
Out:
C D E
R0 61 16 73
R1 30 80 7
R2 80 27 44
R3 47 30 84
R4 41 62 1
R5 5 58 0
...
Le même principe s'applique à la sélection des lignes en fonction des étiquettes. Obtenez les lignes 'R6' à 'R10' à partir de ces colonnes :
df.loc['R6':'R10', 'C':'E']
Out:
C D E
R6 51 27 31
R7 83 19 18
R8 11 67 65
R9 78 27 29
R10 7 16 94
.loc
accepte également un tableau booléen afin que vous puissiez sélectionner les colonnes dont l'entrée correspondante dans le tableau est True
. Par exemple, df.columns.isin(list('BCD'))
renvoie à array([False, True, True, True, False, False], dtype=bool)
- Vrai si le nom de la colonne est dans la liste ['B', 'C', 'D']
; Faux, sinon.
df.loc[:, df.columns.isin(list('BCD'))]
Out:
B C D
R0 78 61 16
R1 27 30 80
R2 53 80 27
R3 65 47 30
R4 9 41 62
R5 78 5 58
...
4 votes
Vous ne voulez jamais utiliser
.ix
car c'est ambigu. Utilisez.iloc
o.loc
si vous le devez.1 votes
Y a-t-il un moyen de le faire sans se référer aux noms des en-têtes ? Comme dans R, je peux le faire comme ceci :
> csvtable_imp_1 <- csvtable_imp[0:6]
et il sélectionne le montant du delta des premières colonnes entre 0 et 6. Tout ce que j'ai eu à faire est de lire la table csv comme délimitée avec la librairie readr.0 votes
J'ai travaillé un peu plus avec elle. J'ai trouvé quelque chose qui fonctionne comme je le voulais. La valeur par défaut est de sélectionner les nombres de caractères et non les colonnes.
infile_1 = largefile_stay.ix[:,0:6]
4 votes
Pour ceux qui tombent sur ce sujet tardivement,
ix
est maintenant déprécié. Pandas recommande d'utiliser l'un ou l'autre :loc
(indexation basée sur les étiquettes) ouiloc
(indexation basée sur la position).1 votes
Pandas : Remplacement de .ix