python - sub - Pandas: ¿Por qué se necesitan dobles corchetes para seleccionar la columna después de la indexación booleana?
subset in python (3)
Debido a que no tiene columnas denominadas ''A'',''C''
, que es lo que intentaría hacer, se generará un KeyError
, por lo que tiene que usar una iterable para subseleccionar desde el df.
Asi que
df[df[''A''] < 3][''A'',''C'']
plantea
KeyError: (''A'', ''C'')
Que es diferente a
In [261]:
df[df[''A''] < 3][[''A'',''C'']]
Out[261]:
A C
0 0 1
1 2 5
Esto no es diferente de intentarlo:
df[''A'',''C'']
Por eso necesitas corchetes dobles:
df[[''A'',''C'']]
Tenga en cuenta que la forma moderna es utilizar .ix
:
In [264]:
df.ix[df[''A''] < 3,[''A'',''C'']]
Out[264]:
A C
0 0 1
1 2 5
Para que esté operando en una vista en lugar de potencialmente una copia
Para una tabla df como abajo,
A B C D
0 0 1 1 1
1 2 3 5 7
3 3 1 2 8
¿Por qué son necesarios los corchetes dobles para seleccionar columnas específicas después de la indexación booleana?
the [[''A'',''C'']] part of
df[df[''A''] < 3][[''A'',''C'']]
Para los objetos pandas (Series, DataFrame), el operador de indexación [] solo acepta
-
colname
o lista de colnames para seleccionar la (s) columna (s) - segmentación o matriz booleana para seleccionar fila (s), es decir, solo se refiere a una dimensión del marco de datos.
Para df[[colname(s)]]
, los corchetes interiores son para la lista, y los corchetes exteriores son operadores de indexación, es decir, debe usar corchetes dobles si selecciona dos o más columnas. Con un nombre de columna, un solo par de corchetes devuelve una serie, mientras que los corchetes dobles devuelven un marco de datos.
Además, df.ix[df[''A''] < 3,[''A'',''C'']]
o df.loc[df[''A''] < 3,[''A'',''C'']]
es mejor que la selección encadenada para evitar devolver una copia en comparación con una vista del marco de datos.
Por favor refiérase a la documentación de los pandas para más detalles.
Porque los corchetes internos son solo la sintaxis de python (literal) para la lista.
Los corchetes externos son la operación del indexador del objeto de marco de datos pandas.
En este caso de uso, el interior [''A'', ''B'']
define la lista de columnas para pasar como único argumento a la operación del indexador, que se denota entre paréntesis externos.