Beschreibung
I pandas.eval
auf einer boolean Serie mit fehlenden Daten verwenden.pandas.eval mit einer boolean Serie mit fehlenden Daten
Dazu verwende ich einen Indexer zum Markieren von Nicht-Null-Werten und .loc
, um nur .eval
auf die Zeilen mit nicht fehlenden Daten anzuwenden.
Die Anwendung des logischen Nicht-Operators mit dem Ausdruck ~bool
oder not(bool)
ergibt -1 oder -2.
Ich verstehe, dass dies, weil meine boolean Serie als Objekttyp wegen der fehlenden Werte gegossen wird, aber ich frage mich:
- Warum die -1 und -2-Ausgang?
- Was wäre der richtige Weg,
.eval
für eine boolesche Reihe mit fehlenden Daten zu verwenden?
Beispiel
ist hier ein reproduzierbares Beispiel Pandas 0.20.3 verwendet wird.
df = pd.DataFrame({'bool': [True, False, None]})
bool
0 True
1 False
2 None
indexer = ~pd.isnull(df['bool'])
0 True
1 True
2 False
Name: bool, dtype: bool
df.loc[indexer].eval('~bool')
0 -2
1 -1
Name: bool, dtype: object
Aber ich wurde immer Wert Fehler – Dark
Warum nicht Casting zu bool vor der Bewertung ie 'df.loc [indexer] .astype (bool) .eval ('~ bool')'. Ich bin auch neugierig, warum Sie -2 und -1 – Dark
Ich kann nicht werfen, weil ich nicht boolesche Spalten drin haben kann (eval gilt für den gesamten Datenrahmen und nicht nur für eine Spalte). z.B. Ich möchte mit 'df.eval ('~ bool & (num> 1)') umgehen können' where num ist eine numerische Spalte. – Alex