2013-06-17 10 views
6

जब मैं CSV फ़ाइलों से डेटा आयात करने की कोशिश कर रहा हूं तो numpy के loadtxt फ़ंक्शन के साथ मुझे एक छोटा सा समस्या है। मेरे पास डेटा फ़ाइलों के प्रकार का नमूना है।numpy loadtxt पहली पंक्ति छोड़ें

यह कॉल 'datafile1.csv':

# Comment 1 
# Comment 2 
x,y,z 
1,2,3 
4,5,6 
7,8,9 
... 
... 
# End of File Comment 

स्क्रिप्ट कि मैंने सोचा था कि इस स्थिति के लिए काम करेगा लगता है कि:

import numpy as np 
FH = np.loadtxt('datafile1.csv',comments='#',delimiter=',',skiprows=1) 

लेकिन, मुझे हो रही है एक त्रुटि:

ValueError: could not convert string to float: x 

यह मुझे बताता है कि kwarg 'skiprows' हेडर को छोड़ नहीं रहा है, यह टिप्पणियों की पहली पंक्ति को छोड़ रहा है। मैं बस यह सुनिश्चित कर सकता हूं कि skiprows = 3, लेकिन जटिलता यह है कि मेरे पास फाइलों की एक बड़ी संख्या है, जो सभी के पास फ़ाइल के शीर्ष पर समान संख्या में टिप्पणी की गई रेखाएं नहीं हैं। मैं यह कैसे सुनिश्चित कर सकता हूं कि जब मैं loadtxt का उपयोग करता हूं तो मुझे इस तरह की स्थिति में वास्तविक डेटा मिल रहा है?

पीएस - मैं भी समाधान समाधान करने के लिए खुला हूँ।

+0

मैं भी जोड़ना चाहिए कि मैं पार्स करने के लिए अजगर में विभिन्न समाधान की कोशिश की है प्रत्येक पंक्ति या तो एक टिप्पणी या चरित्र के लिए, लेकिन जल्दी से एहसास हुआ कि इस प्रकृति के कुछ भी संभवतः काम नहीं कर सकता क्योंकि लोडटाक्स्ट बहुत शुरुआत में विफल रहा है। – astromax

उत्तर

12

छोड़ें टिप्पणी लाइन जनरेटर मैन्युअल का उपयोग कर अभिव्यक्ति:

import numpy as np 

with open('datafile1.csv') as f: 
    lines = (line for line in f if not line.startswith('#')) 
    FH = np.loadtxt(lines, delimiter=',', skiprows=1) 
-1

जैसे अपने स्वयं के कस्टम फिल्टर समारोह, बनाएँ:

def skipper(fname): 
    with open(fname) as fin: 
     no_comments = (line for line in fin if not line.lstrip().startswith('#')) 
     next(no_comments, None) # skip header 
     for row in no_comments: 
      yield row 

a = np.loadtxt(skipper('your_file'), delimiter=',') 
संबंधित मुद्दे