मैं एक dropमुफ्त विकल्प प्रदान करने के लिए @ उपयोगकर्ता के सामान्य समाधान पर विस्तार करूंगा । यह प्रश्न के शीर्षक (ओपी की समस्या नहीं) के आधार पर यहां निर्देशित लोगों के लिए है
मान लें कि आप नकारात्मक मानों वाली सभी पंक्तियों को हटाना चाहते हैं। एक लाइनर समाधान है: -
df = df[(df > 0).all(axis=1)]
चरण दर चरण स्पष्टीकरण: -
चलो एक 5x5 यादृच्छिक सामान्य वितरण डेटा फ़्रेम उत्पन्न करते हैं
np.random.seed(0)
df = pd.DataFrame(np.random.randn(5,5), columns=list('ABCDE'))
A B C D E
0 1.764052 0.400157 0.978738 2.240893 1.867558
1 -0.977278 0.950088 -0.151357 -0.103219 0.410599
2 0.144044 1.454274 0.761038 0.121675 0.443863
3 0.333674 1.494079 -0.205158 0.313068 -0.854096
4 -2.552990 0.653619 0.864436 -0.742165 2.269755
शर्त को नकारात्मक हटा दें। एक बूलियन डीएफ संतोषजनक स्थिति: -
df > 0
A B C D E
0 True True True True True
1 False True False False True
2 True True True True True
3 True True False True False
4 False True True False True
सभी पंक्तियों के लिए एक बूलियन श्रृंखला हालत को संतुष्ट करती है यदि पंक्ति में कोई भी तत्व विफल हो जाता है तो पंक्ति गलत है
(df > 0).all(axis=1)
0 True
1 False
2 True
3 False
4 False
dtype: bool
अंत में स्थिति के आधार पर डेटा फ्रेम से पंक्तियों को फ़िल्टर करें
df[(df > 0).all(axis=1)]
A B C D E
0 1.764052 0.400157 0.978738 2.240893 1.867558
2 0.144044 1.454274 0.761038 0.121675 0.443863
आप प्रदान कर सकते हैं यह वास्तव में करने के लिए df को वापस हटाना बनाम फिल्टर ऊपर किया आईएनजी
df = df[(df > 0).all(axis=1)]
इसे आसानी से NaN s (नॉन न्यूमेरिक एंट्री) वाली पंक्तियों को फ़िल्टर करने के लिए बढ़ाया जा सकता है: -
df = df[(~df.isnull()).all(axis=1)]
इसे ऐसे मामलों के लिए भी सरल बनाया जा सकता है जैसे: उन सभी पंक्तियों को हटा दें जहाँ स्तंभ E ऋणात्मक है
df = df[(df.E>0)]
मैं कुछ प्रोफाइलिंग आंकड़ों के साथ समाप्त करना चाहूंगा कि क्यों @ उपयोगकर्ता का dropसमाधान कच्चे कॉलम आधारित निस्पंदन की तुलना में धीमा है: -
%timeit df_new = df[(df.E>0)]
345 µs ± 10.5 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
%timeit dft.drop(dft[dft.E < 0].index, inplace=True)
890 µs ± 94.9 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
एक स्तंभ मूल रूप से एक है Seriesयानी एक NumPyसरणी यह किसी भी कीमत के बिना अनुक्रमित कर सकते हैं। अंतर्निहित स्मृति संगठन निष्पादन की गति में कैसे निभाता है, इसके लिए इच्छुक लोगों के लिए यहां पंडों की गति बढ़ाने के लिए एक बढ़िया लिंक है :
df[[(len(x) < 2) for x in df['column name']]]लेकिन आपका बहुत अच्छा है। आपकी सहायताके लिए धन्यवाद!