Opis
używam pandas.eval
na logicznej serii z brakującymi danymi.pandas.eval z logicznej serii z brakującymi danymi
Aby to zrobić, używam indeksatora do oznaczania wartości innych niż null i .loc
, aby zastosować tylko .eval
w wierszach z danymi, których nie brakuje.
Zastosowanie operatora logicznego nie używającego wyrażenia ~bool
lub not(bool)
zwraca -1 lub -2.
Rozumiem, że to dlatego, że moja logiczna seria lanego jako typ obiektu z powodu brakujących wartości, ale zastanawiam się:
- dlaczego -1 i -2 wyjście?
- Jaki byłby właściwy sposób używania
.eval
w serii boolowskiej z brakującymi danymi?
Przykład
Oto przykład za pomocą powtarzalnych pandy 0.20.3.
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
Ale ciągle coraz Błąd wartości – Dark
Dlaczego nie rzutować na wartość bool przed obliczeniem, np. 'Df.loc [indexer] .astype (bool) .eval ('~ bool')'. Też jestem ciekawy, dlaczego dostałeś -2 i -1 – Dark
Nie mogę rzutować, ponieważ mogę mieć tam nie-boolowskie kolumny (eval dotyczy całej ramki danych, a nie tylko kolumny). na przykład Chcę być w stanie radzić sobie z 'df.eval ('~ bool & (num> 1)')' gdzie num jest kolumną numeryczną. – Alex