2012-07-12 13 views
50

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

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

उत्तर

98
>>> 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)True के साथ एक समान सरणी देता है जहां NaN, False कहीं और। .any(axis=1), पूरी पंक्तियों पर एक तार्किक or संचालन के साथ n के लिए एक m*n सरणी कम कर देता है ~True/False उलट और a[ ] मूल सरणी, जो कोष्ठक के भीतर True है से सिर्फ पंक्तियों चुनता है।

+0

बहुत बढ़िया धन्यवाद। क्या यह कर रहा है कि यह क्या कर रहा है के बारे में स्पष्टीकरण प्राप्त करना संभव होगा? अभी भी numpy के लिए थोड़ा नया :) – zebra

+0

@zebra - समझाया। इस मामले में – eumiro

+3

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

संबंधित मुद्दे