सभी पंक्तियों को एक numpy.ndarray में कैसे निकालें जिसमें गैर-संख्यात्मक मान हों


95

मूल रूप से, मैं कुछ डेटा विश्लेषण कर रहा हूं। मैं एक numpy.ndarray के रूप में एक डेटासेट में पढ़ता हूं और कुछ मान गायब हैं (या तो बस वहां नहीं होने के नाते, जा रहा है NaN, या एक स्ट्रिंग " NA" लिखा जा रहा है )।

मैं इस तरह से किसी भी प्रविष्टि वाले सभी पंक्तियों को साफ करना चाहता हूं। मैं सुन्न ndarray के साथ कैसे करूँ?

जवाबों:


163
>>> a = np.array([[1,2,3], [4,5,np.nan], [7,8,9]])
array([[  1.,   2.,   3.],
       [  4.,   5.,  nan],
       [  7.,   8.,   9.]])

>>> a[~np.isnan(a).any(axis=1)]
array([[ 1.,  2.,  3.],
       [ 7.,  8.,  9.]])

और इसे पुन: असाइन करें a

स्पष्टीकरण: जहाँ , कहीं और के np.isnan(a)साथ एक समान सरणी देता है। पूरी पंक्तियों पर एक तार्किक ऑपरेशन के साथ एक सरणी को कम कर देता है , inverts और मूल सरणी से सिर्फ पंक्तियों को चुनता है, जो कोष्ठक के भीतर है।TrueNaNFalse.any(axis=1)m*nnor~True/Falsea[ ]True


11
np.isfiniteइस मामले में भी उपयोगी है, साथ ही जब आप ±Infमूल्यों से छुटकारा चाहते हैं। इसकी आवश्यकता नहीं है ~, क्योंकि यह केवल परिमित दायरे के लिए सही है।
naught101

7
@ n-0101 आपको भी बदलना anyहोगा all। चूंकि आप पंक्तियों का चयन करना चाहते हैं जहां "सभी परिमित हैं", पंक्तियों का चयन करने के बजाय जहां "कोई भी नैनो नहीं है"।
अन्नानय
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.