मैं दो कॉलम में मानों द्वारा डेटाफ्रेम में पंक्तियों को फ़िल्टर कर रहा हूं।
किसी कारण के लिए OR ऑपरेटर व्यवहार करता है जैसे मैं अपेक्षा करता हूं और ऑपरेटर इसके विपरीत व्यवहार करता है।
मेरा परीक्षण कोड:
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उन्हें गिराने के लिए दोनों मूल्यों के बराबर होने की आवश्यकता होती है। मैं बिल्कुल विपरीत परिणाम की उम्मीद करूंगा। किसी को भी इस व्यवहार की व्याख्या कर सकते हैं, कृपया?
मैं पांडा का उपयोग कर रहा हूं 0.13.1।
df.queryऔरpd.evalइस उपयोग के मामले के लिए अच्छे फिट्स लगते हैं।pd.eval()कार्यों के परिवार, उनकी विशेषताओं और उपयोग के मामलों की जानकारी के लिए, कृपया pd.eval () का उपयोग करके पांडा में गतिशील अभिव्यक्ति मूल्यांकन पर जाएं ।