두 열의 값으로 데이터 프레임의 행을 필터링하고 있습니다.
어떤 이유로 OR 연산자는 AND 연산자가 예상하는 것처럼 작동하며 그 반대의 경우도 마찬가지입니다.
내 테스트 코드 :
import pandas as pd
df = pd.DataFrame({'a': range(5), 'b': range(5) })
# let's insert some -1 values
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], axis=1,
keys = [ 'original df', 'using AND (&)', 'using OR (|)',])
그 결과 :
original df using AND (&) using OR (|)
a b a b a b
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 rows x 6 columns]
보시다시피 AND
연산자는 적어도 하나의 값이 인 모든 행을 삭제합니다 -1
. 반면에 OR
연산자는 두 값을 모두 삭제하려면 두 값이 같아야 -1
합니다. 나는 정확히 반대의 결과를 기대할 것입니다. 누구든지이 행동을 설명해 주시겠습니까?
pandas 0.13.1을 사용하고 있습니다.
df.query
그리고pd.eval
이 사용 사례에 대한 좋은 맞는 것처럼 보인다.pd.eval()
함수 제품군, 기능 및 사용 사례 에 대한 정보는 pd.eval ()을 사용하는 pandas의 동적 표현식 평가를 참조하십시오 .