2013-04-15 7 views
5

मैं अजगर में numpy पुस्तकालय का उपयोग कर रहा एक ndarray में CSV फ़ाइल डेटा आयात करने के इस प्रकार है:numpy का उपयोग कर डेटा आयात करते समय कॉलम नामों को कैसे संरक्षित किया जाए?

print(data.dtype.names) 

('row_label', 
'MyDataColumn1_0', 
'MyDataColumn1_1') 

मूल स्तंभ नाम हैं::

data = np.genfromtxt('mydata.csv', 
        delimiter='\,', dtype=None, names=True) 

परिणाम निम्न स्तंभ नाम प्रदान करता है

ROW_LABEL, मेरे-डाटा-स्तंभ-1.0, मेरे-डाटा-स्तंभ-1,1

ऐसा प्रतीत होता है कि numpy मेरे कॉलम नामों को सी-शैली परिवर्तनीय नाम स्वरूपण को अपनाने के लिए मजबूर कर रहा है। फिर भी ऐसे कई मामले हैं जहां मेरे पायथन स्क्रिप्ट को कॉलम नाम के अनुसार कॉलम तक पहुंच की आवश्यकता होती है, इसलिए मुझे यह सुनिश्चित करना होगा कि कॉलम नाम निरंतर बने रहें। इसे पूरा करने के लिए या तो मूल कॉलम नामों को संरक्षित करने के लिए numpy की आवश्यकता है या अन्यथा मुझे अपने कॉलम नामों को प्रारूप numpy में कनवर्ट करने की आवश्यकता है।

आयात के दौरान मूल कॉलम नामों को संरक्षित करने का कोई तरीका है? यदि नहीं, तो क्या प्रारूप संख्या का उपयोग करने के लिए कॉलम लेबल को कनवर्ट करने का कोई आसान तरीका है, अधिमानतः कुछ numpy फ़ंक्शन का उपयोग करना?

validate_names = NameValidator(excludelist=excludelist, 
           deletechars=deletechars, 
           case_sensitive=case_sensitive, 
           replace_space=replace_space) 

ये उन विकल्पों है कि आप की आपूर्ति कर सकते हैं::

+0

यहाँ देखें: http://stackoverflow.com/questions/14429992/can-i-rename-fields-in-a-numpy-record-array –

+0

@RichardHollis यह मैं एक ही सवाल नहीं है - मैं पहले ही कॉलम नाम आयात कर सकता हूं, लेकिन मैं उनके स्वरूपण को संरक्षित करना चाहता हूं। शायद मुझे प्रश्न शीर्षक संशोधित करना चाहिए। – holocronweaver

उत्तर

3

अगर आप names=True निर्धारित करते हैं, तो आपके डेटा फ़ाइल की पहली पंक्ति इस समारोह के माध्यम से पारित कर दिया है

excludelist : sequence, optional 
    A list of names to exclude. This list is appended to the default list 
    ['return','file','print']. Excluded names are appended an underscore: 
    for example, `file` would become `file_`. 
deletechars : str, optional 
    A string combining invalid characters that must be deleted from the 
    names. 
defaultfmt : str, optional 
    A format used to define default field names, such as "f%i" or "f_%02i". 
autostrip : bool, optional 
    Whether to automatically strip white spaces from the variables. 
replace_space : char, optional 
    Character(s) used in replacement of white spaces in the variables 
    names. By default, use a '_'. 

शायद आप की कोशिश कर सकते अपनी खुद की deletechars स्ट्रिंग जो एक खाली स्ट्रिंग है आपूर्ति करने के लिए। लेकिन आप को संशोधित करने और गुजर बेहतर होगा इस:

defaultdeletechars = set("""[email protected]#$%^&*()-=+~\|]}[{';: /?.>,<""") 

बस अवधि और उस सेट से ऋण चिह्न बाहर ले, और के रूप में इसे पारित: https://github.com/numpy/numpy/blob/master/numpy/lib/_iotools.py#l245

:

np.genfromtxt(..., names=True, deletechars="""[email protected]#$%^&*()=+~\|]}[{';: /?>,<""") 

यहाँ स्रोत है

+0

मैं प्रासंगिक स्रोत कोड को सीधे जोड़ने और हटाने वालों के लिए खाली स्ट्रिंग के बेहतर विकल्प जोड़ने की सराहना करता हूं। जैसा आपने सुझाव दिया है वैसे ही काम करता है। धन्यवाद! – holocronweaver

+0

आपका स्वागत है, खुशी है कि यह आपके मामले के लिए काम करता है। आप शायद इसे जानते हैं, लेकिन भविष्य में जा रहे हैं, यदि आप अपने कॉलम नामों को सरल रखने और सामान्य रूप से प्रतिबंधित वर्णों से बचने का प्रयास कर सकते हैं तो आपका कोड अधिक मजबूत होगा। – askewchan

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

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