pandas                
            Boolesche Indizierung von Datenrahmen
        
        
            
    Suche…
Einführung
 Zugriff auf Zeilen in einem Datenrahmen mit den DataFrame-Indexerobjekten .ix , .loc , .iloc und wie sie sich von der Verwendung einer booleschen Maske unterscheiden 
Zugriff auf einen DataFrame mit einem booleschen Index
Dies wird unser Beispieldatenrahmen sein:
df = pd.DataFrame({"color": ['red', 'blue', 'red', 'blue']},
                  index=[True, False, True, False])
      color
True    red
False  blue
True    red
False  blue
 Zugriff mit .loc 
df.loc[True]
     color
True   red
True   red
 Zugriff mit .iloc 
df.iloc[True]
>> TypeError
df.iloc[1]
color    blue
dtype: object
Wichtig zu beachten ist , dass ältere Versionen Pandas nicht zwischen boolean und Integer - Eingang unterschieden, so
.iloc[True]würde das gleiche wie das Rück.iloc[1]
 Zugriff mit .ix 
df.ix[True]
     color
True   red
True   red
df.ix[1]
color    blue
dtype: object
 Wie Sie sehen, hat .ix zwei Verhalten. Dies ist eine sehr schlechte Praxis im Code und sollte daher vermieden werden. Bitte verwenden Sie .iloc oder .loc , um genauer zu sein. 
Anwenden einer booleschen Maske auf einen Datenrahmen
Dies wird unser Beispieldatenrahmen sein:
  color      name   size
0   red      rose    big
1  blue    violet    big
2   red     tulip  small
3  blue  harebell  small
 Verwenden des magischen __getitem__ oder [] __getitem__ . Wenn Sie ihm eine Liste von Wahr und Falsch mit derselben Länge wie das Datenfeld geben, erhalten Sie 
df[[True, False, True, False]]
  color   name   size
0   red   rose    big
2   red  tulip  small
Maskieren von Daten basierend auf dem Spaltenwert
Dies wird unser Beispieldatenrahmen sein:
  color      name   size
0   red      rose    big
1  blue    violet  small
2   red     tulip  small
3  blue  harebell  small
 Beim Zugriff auf eine einzelne Spalte aus einem pd.Series können wir einen einfachen Vergleich == , um jedes Element in der Spalte mit der angegebenen Variablen zu vergleichen und eine pd.Series von True und False zu erzeugen 
df['size'] == 'small'
0    False
1     True
2     True
3     True
Name: size, dtype: bool
 Diese pd.Series ist eine Erweiterung eines np.array die eine Erweiterung einer einfachen list . Daher können wir sie wie im obigen Beispiel an __getitem__ oder [] . 
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
Maskieren von Daten basierend auf dem Indexwert
Dies wird unser Beispieldatenrahmen sein:
         color   size
name                 
rose       red    big
violet    blue  small
tulip      red  small
harebell  blue  small
Wir können eine Maske basierend auf den Indexwerten erstellen, genau wie bei einem Spaltenwert.
rose_mask = df.index == 'rose'
df[rose_mask]
     color size
name           
rose   red  big
Aber das ist fast das Gleiche wie
df.loc['rose']
color    red
size     big
Name: rose, dtype: object
 Der wichtige Unterschied besteht darin, dass, wenn .loc nur eine Zeile im übereinstimmenden Index pd.Series , eine pd.Series wird. Wenn mehr Zeilen gefunden werden, die übereinstimmen, wird ein pd.DataFrame . Dies macht diese Methode ziemlich instabil. 
 Dieses Verhalten kann gesteuert werden, indem dem .loc eine Liste eines einzelnen Eintrags .loc . Dadurch wird ein Datenrahmen zurückgegeben. 
df.loc[['rose']]
         color   size
name                 
rose       red    big