panda: condizioni multiple durante l’indicizzazione del frame di dati – comportamento imprevisto

| | | |

Sto filtrando le righe in un frame di dati in base ai valori in due colonne.

Per qualche motivo l'operatore OR si comporta come mi aspetterei dall'operatore AND e viceversa.

Il mio codice di test:

import panda come pd df = pd.DataFrame({"a": range(5), "b": range(5) }) # inseriamo alcuni - 1 valori df["a"][1] = -1 df["b"][1] = -1 df["a"][3] = -1 df["b"][4] = -1 df1 = df[(df.a != -1) & (df.b != -1)] df2 = df[(df.a != -1) | (df.b != -1)] print pd.concat([df, df1, df2], asse=1, chiavi = [ "df originale", "usando AND (&)", "usando OR (|)",]) 

E il risultato:

 df originale usando AND (&) usando OR (|) ababab 0 0 0 0 0 0 0 1 -1 -1 NaN NaN NaN NaN 2 2 2 2 2 2 2 3 -1 3 NaN NaN -1 3 4 4 -1 NaN NaN 4 -1 [5 righe x 6 colonne] 

Come puoi vedere, il L'operatore AND elimina ogni riga in cui almeno un valore è uguale a -1. D'altra parte, l'operatore OR richiede che entrambi i valori siano uguali a -1 a lasciali cadere. Mi aspetterei esattamente il risultato opposto. Qualcuno potrebbe spiegare questo comportamento, per favore?

Sto usando Pandas 0.13.1.