सुन्न सरणी में विशिष्ट कॉलम निकालना


164

यह एक आसान सवाल है लेकिन कहते हैं कि मेरे पास एक MxN मैट्रिक्स है। मैं केवल विशिष्ट कॉलम निकालना चाहता हूं और उन्हें अन्य सुपीरियर एरे में स्टोर करना चाहता हूं लेकिन मुझे अवैध सिंटैक्स त्रुटियां मिलती हैं। यहाँ कोड है:

extractedData = data[[:,1],[:,9]]. 

ऐसा लगता है कि उपरोक्त पंक्ति को पर्याप्त होना चाहिए लेकिन मुझे लगता है कि नहीं। मैंने चारों ओर देखा लेकिन इस विशिष्ट परिदृश्य के बारे में कुछ भी वाक्यविन्यास नहीं पाया।

जवाबों:


272

मुझे लगता है कि आप कॉलम 1और 9चाहते थे ? यही कारण है कि के

data[:, [1, 9]]

या नाम के साथ:

data[:, ['Column Name1','Column Name2']]

आप data.dtype.names… से नाम प्राप्त कर सकते हैं


कॉलम नामों के साथ ऐसा कैसे करें?
ज़ेल्फिर कल्टस्टाहल

9
डेटा [:, ['कॉलम Name1', 'कॉलम Name2']]
कोड-हत्यारे

यह एक दृश्य है या एक प्रति है? मेरी अड़चन इस लाइन पर है जिसे मैं अनुकूलन के लिए
खोजता

1
क्या यह हो सकता है कि यह फ़ंक्शन अब काम नहीं कर रहा है?
पीवी

इस वाक्य रचना को क्या कहा जाता है?
बुरिटो

29

मान लें कि आप उस कोड स्निपेट के साथ कॉलम 1 और 9 प्राप्त करना चाहते हैं, तो यह होना चाहिए:

extractedData = data[:,[1,9]]

14

यदि आप केवल कुछ कॉलम निकालना चाहते हैं:

idx_IN_columns = [1, 9]
extractedData = data[:,idx_IN_columns]

यदि आप विशिष्ट स्तंभों को बाहर करना चाहते हैं:

idx_OUT_columns = [1, 9]
idx_IN_columns = [i for i in xrange(np.shape(data)[1]) if i not in idx_OUT_columns]
extractedData = data[:,idx_IN_columns]

9

एक बात जो मैं बताना चाहूंगा, यदि आपके द्वारा निकाले जाने वाले स्तंभों की संख्या 1 है, तो परिणामस्वरूप मैट्रिक्स एक Mx1 मैट्रिक्स नहीं होगा जैसा कि आप उम्मीद कर सकते हैं, बल्कि इसके बजाय एक सरणी जिसमें आपके द्वारा निकाले गए कॉलम के तत्व हैं।

मैट्रिक्स में इसे बदलने के लिए रिस्पे (M, 1) विधि का उपयोग परिणामी सरणी पर किया जाना चाहिए।


2
उदाहरण के लिए, आप एक बृहदान्त्र का उपयोग करके इसे प्राप्त कर सकते हैं data[:, 8:9]। यह आठ कॉलम लेता है, लेकिन अतिरिक्त आयाम को नहीं हटाता है।
Jan Kukacka

डेटा [:, 8] भी 8 वीं स्तंभ चुनें और एक MX1 मैट्रिक्स वापस आ जाएगी
StefanMK

5

बस:

>>> m = np.matrix(np.random.random((5, 5)))
>>> m
matrix([[0.91074101, 0.65999332, 0.69774588, 0.007355  , 0.33025395],
        [0.11078742, 0.67463754, 0.43158254, 0.95367876, 0.85926405],
        [0.98665185, 0.86431513, 0.12153138, 0.73006437, 0.13404811],
        [0.24602225, 0.66139215, 0.08400288, 0.56769924, 0.47974697],
        [0.25345299, 0.76385882, 0.11002419, 0.2509888 , 0.06312359]])
>>> m[:,[1, 2]]
matrix([[0.65999332, 0.69774588],
        [0.67463754, 0.43158254],
        [0.86431513, 0.12153138],
        [0.66139215, 0.08400288],
        [0.76385882, 0.11002419]])

कॉलम क्रम में नहीं होना चाहिए:

>>> m[:,[2, 1, 3]]
matrix([[0.69774588, 0.65999332, 0.007355  ],
        [0.43158254, 0.67463754, 0.95367876],
        [0.12153138, 0.86431513, 0.73006437],
        [0.08400288, 0.66139215, 0.56769924],
        [0.11002419, 0.76385882, 0.2509888 ]])

2

इस तरह की सूची का उपयोग करते हुए ND सरणी से कॉलम का चयन करते समय एक और बात पर आपको ध्यान देना चाहिए:

data[:,:,[1,9]]

यदि आप एक आयाम निकाल रहे हैं (केवल एक पंक्ति का चयन करके, उदाहरण के लिए), परिणामस्वरूप सरणी (किसी कारण के लिए) अनुमत होगी । इसलिए:

print data.shape            # gives [10,20,30]
selection = data[1,:,[1,9]]
print selection.shape       # gives [2,20] instead of [20,2]!!

1

आप उपयोग कर सकते हैं :

extracted_data = data.ix[:,['Column1','Column2']]


2
एक अच्छे उत्तर में हमेशा एक स्पष्टीकरण होगा कि क्या किया गया था और यह इस तरह से क्यों किया गया था, न केवल ओपी के लिए बल्कि भविष्य के आगंतुकों के लिए एसओ। दूसरों को समझने के लिए कृपया कुछ विवरण जोड़ें।
रूचा भट्ट जोशी

-1

मुझे लगता है कि यहाँ समाधान अब अजगर संस्करण के अद्यतन के साथ काम नहीं कर रहा है, एक तरीका यह है कि इसके लिए एक नए अजगर फ़ंक्शन के साथ क्या करना है:

extracted_data = data[['Column Name1','Column Name2']].to_numpy()

जो आपको वांछित परिणाम देता है।

प्रलेखन आप यहाँ पा सकते हैं: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_numpy.html#pandas.DataFrame.to_numpy


सवाल एक संख्यात्मक सरणी के साथ शुरू होता है, न कि
डेटाफ्रेम

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.