Pour une table comme ci-dessous,
A B C D
0 0 1 1 1
1 2 3 5 7
3 3 1 2 8
pourquoi les doubles crochets sont-ils nécessaires pour sélectionner des colonnes spécifiques après l'indexation booléenne?
the [['A','C']] part of
df[df['A'] < 3][['A','C']]
Pour les objets pandas (Series, DataFrame), l’opérateur d’indexation [] accepte uniquement
colname
ou liste de noms de colonnes pour sélectionner les colonnes Pour df[[colname(s)]]
, les crochets intérieurs sont pour la liste et les crochets extérieurs sont des opérateurs d’indexation, c’est-à-dire que vous devez utiliser des crochets doubles si vous sélectionnez deux colonnes ou plus. Avec un nom de colonne, une paire de crochets renvoie une série, tandis que les crochets doubles renvoient une image.
De plus, df.ix[df['A'] < 3,['A','C']]
ou df.loc[df['A'] < 3,['A','C']]
est préférable à la sélection chaînée pour éviter de renvoyer une copie par rapport à une vue de la trame de données.
Veuillez vous référer à documentation pandas pour plus de détails
Parce que vous n’avez pas de colonne nommée 'A','C'
, c’est ce que vous tenteriez de faire et qui va générer une KeyError
, vous devez donc utiliser un itérable pour sous-sélectionner à partir du df.
Alors
df[df['A'] < 3]['A','C']
soulève
KeyError: ('A', 'C')
Ce qui est différent de
In [261]:
df[df['A'] < 3][['A','C']]
Out[261]:
A C
0 0 1
1 2 5
Ce n'est pas différent d'essayer:
df['A','C']
c'est pourquoi vous avez besoin de doubles crochets:
df[['A','C']]
Notez que la méthode moderne consiste à utiliser .ix
:
In [264]:
df.ix[df['A'] < 3,['A','C']]
Out[264]:
A C
0 0 1
1 2 5
Pour que vous utilisiez une vue plutôt qu'une copie potentielle
Parce que les crochets internes ne sont que la syntaxe python (littérale) de la liste.
Les crochets extérieurs représentent l'opération d'indexation de l'objet pandas Dataframe.
Dans ce cas d'utilisation inner ['A', 'B']
définit la liste des colonnes à transmettre en tant qu'argument unique à l'opération d'indexation, indiquée par des crochets externes.