2017-09-17 12 views
6

में डेटा बदलने मान लीजिए मैं निम्नलिखित numpy वेक्टरनिकाला जा रहा है और numpy

[[1, 3., 'John Doe', 'male', 'doc', '25'], 
    ..., 
[9, 6., 'Jane Doe', 'female', 'p', '28']] 

मैं अपने कार्य डेटा के लिए प्रासंगिक निकालने के लिए की जरूरत है।

numpy और सामान्य रूप में अजगर में एक नौसिखिया होने के नाते, मैं निम्नलिखित तरीके से यह करना होगा:

data = np.array(
[[1, 3., 'John Doe', 'male', 'doc', 25], 
[9, 6., 'Jane Doe', 'female', 'p', 28]] 
) 

data_tr = np.zeros((data.shape[0], 3)) 
for i in range(0, data.shape[0]): 
    data_tr[i][0] = data[i, 1] 
    data_tr[i][1] = 0 if data[i, 3] == 'male' else 1 
    data_tr[i][2] = data[i, 5] 

और मैं निम्नलिखित है एक परिणाम के रूप:

[[ 3., 0., 25.], 
[ 6., 1., 28.]] 

मैं चाहते हैं क्या यह जानने के लिए कि क्या ऐसा करने के लिए एक अधिक कुशल या क्लीनर तरीका है।
क्या कोई मेरी मदद कर सकता है?

column-indexing साथ
+1

टिप्पणियों के एक जोड़े - एक 'np.array' एक सन्निहित वस्तु है, इसका मतलब है कि हर तत्व हो गया है वही प्रकार इसलिए 'डेटा' का नतीजा पहले से तारों की एक सूची है क्योंकि आप' नर 'और अन्य तारों को न्यूमेरिका प्रकार पर मार्शल नहीं कर सकते हैं। सूची का उपयोग करने के लिए बेहतर है। – Chinny84

+0

'डेटा' देखें। यह तारों की एक (2,6) सरणी है, मिश्रित संख्या और तार नहीं। दूसरी तरफ 'data_tr' डिफ़ॉल्ट' फ्लोट 'प्रकार है। 'डेटा' से 'data_tr'' numpy' को असाइन करने पर स्ट्रिंग को फ़्लोट में बदलने की कोशिश की जाती है। इस मामले में यह काम करता है। लेकिन अगर आपको कॉलम गलत लगता है तो यह एक त्रुटि दे सकता है। – hpaulj

उत्तर

5

एक दृष्टिकोण -

data_tr = np.zeros((data.shape[0], 3)) 
data_tr[:,[0,2]] = data[:, [1,5]] 
data_tr[:,1] = data[:,3]=='male' 

ध्यान दें कि कदम: data_tr[:,[0,2]] = data[:, [1,5]] संबंधित कॉलमों बंद प्रतियों के साथ काम कर रहा है। वे असाइनमेंट और निष्कर्षण के लिए बहुत कुशल नहीं हैं। तो, आप क्या करना है कि दो अलग-अलग चरणों में, ज्यादातर प्रदर्शन के लिए है, इसलिए की तरह चाहते हो सकता है -

data_tr[:,0] = data[:, 1] 
data_tr[:,2] = data[:, 5] 
+1

टिप्पणी को फिर से पढ़ना ऐसा लगता है कि आप वास्तव में केवल 'एल्गोरिदम' भाग पर चर्चा करते हैं। हालांकि आपको उपयोगकर्ता को पहली बार सूची में इंगित करना चाहिए। +1 – Chinny84

+1

@ Chinny84 मुझे इनपुट का स्रोत नहीं पता है। इसलिए, मैं इनपुट पर condone या condon करने की कोई स्थिति नहीं है। उत्तरदाता के रूप में मैं दिए गए इनपुट से शुरू कर रहा हूं और वांछित आउटपुट प्राप्त करने की कोशिश कर रहा हूं। मुझे यकीन नहीं है कि आपकी चिंता का जवाब है, लेकिन मुझे उम्मीद है कि यह करता है। – Divakar

+0

हैलो, दिवाकर! एक उत्तर के लिए धन्यवाद, यह सुनिश्चित है कि मैं क्या देख रहा था! जबकि मुख्य भाग निश्चित रूप से उत्तर दिया गया है, मैं अपने जैसे डेटा को संभालने के सर्वोत्तम प्रथाओं के बारे में पूछना चाहता था। जैसा कि @ चिन्नी 84 ने बताया (और जैसा कि मैंने संदेह किया), मैं निश्चित रूप से बेस दृष्टिकोण का उपयोग नहीं कर रहा हूं। –

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