2014-05-13 4 views
11

फ्लोट करने के लिए स्ट्रिंग (वैज्ञानिक नोटेशन में) कनवर्ट करें मैं एक बड़ी .csv फ़ाइल आयात करने की कोशिश कर रहा हूं जिसमें numpy में genfromtxt का उपयोग करके टेक्स्ट और नंबर शामिल हैं। मुझे केवल दो कॉलम में दिलचस्पी है। क्रमशः ELEM और concs के लिए उत्पादन के साथपाइथन:

def importfile(root): 
    data = root.entry.get() 
    atw = np.genfromtxt(data, delimiter=",", 
         skip_header=1, 
         skip_footer=2, 
         autostrip=True, 
         usecols=(25,26), 
         dtype=("|S10")) 
    elem = atw[:,0] 
    concs = atw[:,1] 

    print(elem) 
    print(concs) 

:: मैं आयात से अधिकांश के साथ हल है

['Na2O' 'MgO' 'Al2O3' 'SiO2' 'P2O5' 'SO3' 'Cl' 'K2O' 'CaO' 'TiO2' 'Cr2O3' 
'MnO' 'FeO' 'NiO' 'Cu2O' 'ZnO' 'Ga2O3' 'SrO' 'Y2O3'] 

['3.76E+00' '1.31E+01' '1.14E+01' '4.04E+01' '1.24E+00' '5.89E-02' 
'2.43E-02' '1.53E+00' '1.49E+01' '2.87E+00' '6.05E-02' '1.96E-01' 
'1.17E+01' '3.69E-02' '8.73E-03' '1.39E-02' '1.93E-03' '1.88E-01' 
'5.58E-03'] 

मैं एक नाव में concs स्ट्रिंग परिवर्तित करने के लिए कई अलग अलग बातें की कोशिश की है, लेकिन यह नहीं करता है इस तथ्य की तरह प्रतीत नहीं होता है कि कॉन्स वैज्ञानिक नोटेशन में हैं .... क्या कॉन्स वैल्यू को फ्लोट में बदलने का कोई तरीका मौजूद है? अपने समर्थन के लिए अग्रिम धन्यवाद।

उत्तर

14

float समारोह कर सकते हैं:

>>> float('1.31E+01') 
13.1 

या एक सूची के लिए:

>>> map(float, ['3.76E+00', '1.31E+01', '1.14E+01']) 
[3.76, 13.1, 11.4] 
+1

अनिवार्य सूची समझ दृष्टिकोण: 'एन = ['3.76 ई + 00', '1.31 ई +01', '1.14 ई + 01'] [फ्लोट (i) में मैं n]' –

+0

फ्लोट (i) जीता मेरे लिए काम नहीं करता मेरे पास मिश्रित सूची है और मैं इसे बदलना चाहता हूं। मुझे यकीन नहीं है कि अगर मैं इसे विभाजित नहीं करना चाहता तो मुझे क्या उपयोग करना चाहिए। –

0
with open(datafile,'r') as inData: 
    for line in inData: 
      j = list(map(float, filter(None , [ x for x in line.strip().split(',') ]))) 

बस, आम तौर पर उल्लेख किया है यह एक ऐसी ही समस्या यह है कि मुझे इस के लिए लाया हल करती है के रूप में पृष्ठ।