Friday, 15 January 2010

python - How to preserve column names starting with a minus when using numpy.genfromtxt? -


इसी तरह, numpy.genfromtxt मेरे कॉलम के नामों को संशोधित करता है:

  आयात के रूप में एनपीपी को आयात करें IO आयात से बाइटियो # https://stackoverflow.com/a/11970414/321973 str = 'x, -1,1 \ n0,1,1 \ n1,2,3' डेटा = एनपी (Code.type.names) प्रिंट  

पैदावार ('x', 'x', '1', '1_1') वांछित के बजाय ('एक्स', '-1', '1') (या इससे भी बेहतर, ('x' -1, 1) )। मैंने कोशिश की deletechars = "" ~! @ # $% ^ & Amp; () = + ~ \ |]} [{';: /? & Gt ;, & lt; "" " जैसा कि सुझाव दिया गया है कोई फायदा नहीं हुआ।

आप जो व्यवहार देख रहे हैं वह इस तथ्य से होता है कि np।

क्षेत्रनाम के नाम से कुछ गैर-अल्फ़ान्यूमेरिक वर्णों को स्वचालित रूप से पट्टी करने के लिए genfromtxt का उपयोग करता है NameValidator वर्ग।

यह एक फ़ील्ड नाम के लिए पूरी तरह से एक - ' चरित्र, उदा:

  x = np.array ((1,), dtype = [(' - 1 ',' i ')]) प्रिंट (x [ '-1']) # 1  

वास्तव में, संशोधित फ़ील्ड नामों में से दो में से दो, जो आप np.genfromtxt से वापस प्राप्त करते हैं "मान्य नहीं हैं पायथन पहचानकर्ता "( '1' और '1_1' , चूंकि वे अंक से शुरू करते हैं)।

जब तक आप फील्ड नामों को सेट करने के लिए np.genfromtxt का इस्तेमाल करते हुए बाईपास करते हैं ऐसा करने का एक तरीका एक खाली सरणी को इनिशियलाइज़ करना होगा, फ़ील्ड नामों और डीटीक्स् को स्पष्ट रूप से निर्दिष्ट करें, फिर इसे शेष स्ट्रिंग सामग्री से भरें:

  names = str.splitlines () [ 0] .split (',') प्रकार = ('मैं',) * 3 dtype = ज़िप (नाम, प्रकार) डेटा = np.empty (2, dtype = dtype) डेटा [:] = np.genfromtxt (BytesIO ( # (। (0, 0, 1), (1, 0, 2)], # Dtype = [('x', '& lt; i4'), ('-1', '& lt; i4'), ('1', '& lt; i4')])  
< P> हालांकि, सिर्फ इसलिए कि आप इसका मतलब यह नहीं कर सकते कि आपको चाहिए - आपके क्षेत्र के नामों में से एक में '-' होने के कारण अन्य अप्रत्याशित परिणाम हो सकते हैं सबसे सुरक्षित विकल्प केवल वैध पायथन पहचानकर्ताओं को फ़ील्ड नाम के रूप में उपयोग करने के लिए छड़ी करना है।


No comments:

Post a Comment