मैं दो कॉलम में मानों द्वारा डेटाफ्रेम में पंक्तियों को फ़िल्टर कर रहा हूं।
किसी कारण के लिए 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 () का उपयोग करके पांडा में गतिशील अभिव्यक्ति मूल्यांकन पर जाएं ।