No olvides que en las ciencias un problema casi siempre tiene diferentes soluciones, de igual modo nosotros aquí te mostramos lo más óptimo y mejor.
Solución:
Para objetos pandas (Series, DataFrame), el operador de indexación [] solo acepta
colname
o lista de nombres de columna para seleccionar la(s) columna(s)- rebanado o booleano array 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 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.
También, 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 frente a una vista del marco de datos.
Consulte la documentación de pandas para obtener más información.
Porque no tienes columnas nombradas 'A','C'
que es lo que estaría tratando de hacer, lo que generará un KeyError
por lo que debe usar un iterable para subseleccionar desde el df.
Asi que
df[df['A'] < 3]['A','C']
aumenta
Error de tecla: ('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 a intentar:
df['A','C']
por eso necesita corchetes dobles:
df[['A','C']]
Tenga en cuenta que la forma moderna es usar .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
Porque los corchetes internos son solo sintaxis de Python (literal) para la lista.
Los corchetes exteriores son la operación del indexador del objeto del marco de datos de pandas.
En este caso de uso interno ['A', 'B']
define la lista de columnas a pasar como único argumento a la operación del indexador, que se indica entre corchetes exteriores.
Aquí puedes ver las reseñas y valoraciones de los lectores
Si te ha resultado de provecho nuestro post, agradeceríamos que lo compartas con otros juniors de esta manera nos ayudas a difundir esta información.