pandas                
            Indexación booleana de marcos de datos
        
        
            
    Buscar..
Introducción
 Acceso a las filas en un marco de datos utilizando los objetos del indexador .ix , .loc , .iloc y cómo se diferencia de usar una máscara booleana. 
Accediendo a un DataFrame con un índice booleano
Este será nuestro marco de datos de ejemplo:
df = pd.DataFrame({"color": ['red', 'blue', 'red', 'blue']},
                  index=[True, False, True, False])
      color
True    red
False  blue
True    red
False  blue
 Accediendo con .loc 
df.loc[True]
     color
True   red
True   red
 Accediendo con .iloc 
df.iloc[True]
>> TypeError
df.iloc[1]
color    blue
dtype: object
Es importante tener en cuenta que las versiones anteriores de los pandas no distinguían entre la entrada booleana y la de enteros, por lo que
.iloc[True]devolvería lo mismo que.iloc[1]
 Accediendo con .ix 
df.ix[True]
     color
True   red
True   red
df.ix[1]
color    blue
dtype: object
 Como puedes ver, .ix tiene dos comportamientos. Esta es una muy mala práctica en el código y, por lo tanto, debe evitarse. Por favor use .iloc o .loc para ser más explícito. 
Aplicar una máscara booleana a un marco de datos
Este será nuestro marco de datos de ejemplo:
  color      name   size
0   red      rose    big
1  blue    violet    big
2   red     tulip  small
3  blue  harebell  small
 Usando el __getitem__ mágico __getitem__ o [] . Dándole una lista de Verdadero y Falso de la misma longitud que el marco de datos le dará: 
df[[True, False, True, False]]
  color   name   size
0   red   rose    big
2   red  tulip  small
Datos de enmascaramiento basados en el valor de la columna
Este será nuestro marco de datos de ejemplo:
  color      name   size
0   red      rose    big
1  blue    violet  small
2   red     tulip  small
3  blue  harebell  small
 Accediendo a una sola columna desde un marco de datos, podemos usar una comparación simple == para comparar cada elemento de la columna con la variable dada, produciendo un pd.Series de Verdadero y Falso 
df['size'] == 'small'
0    False
1     True
2     True
3     True
Name: size, dtype: bool
 Esta pd.Series es una extensión de un np.array que es una extensión de una list simple. Por lo tanto, podemos entregar esto al __getitem__ o [] accessor como en el ejemplo anterior. 
size_small_mask = df['size'] == 'small'
df[size_small_mask]
  color      name   size
1  blue    violet  small
2   red     tulip  small
3  blue  harebell  small
Datos de enmascaramiento basados en el valor del índice
Este será nuestro marco de datos de ejemplo:
         color   size
name                 
rose       red    big
violet    blue  small
tulip      red  small
harebell  blue  small
Podemos crear una máscara basada en los valores del índice, al igual que en un valor de columna.
rose_mask = df.index == 'rose'
df[rose_mask]
     color size
name           
rose   red  big
Pero hacer esto es casi lo mismo que
df.loc['rose']
color    red
size     big
Name: rose, dtype: object
 La diferencia importante es que cuando .loc solo encuentra una fila en el índice que coincide, devolverá un pd.Series , si encuentra más filas que coinciden, devolverá un pd.DataFrame . Esto hace que este método sea bastante inestable. 
 Este comportamiento puede controlarse dando a .loc una lista de una sola entrada. Esto lo obligará a devolver un marco de datos. 
df.loc[['rose']]
         color   size
name                 
rose       red    big