2013-06-17 27 views
6

Numpy'nin loadtxt işleviyle CSV dosyalarından veri almayı denediğimde küçük bir sorunum var. İşte sahip olduğum veri dosyalarının bir örneği.numpy loadtxt İlk satırı atla

Çağrı bunu 'datafile1.csv':

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

bu durum için işe düşündüm senaryo gibi görünüyor:

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

Ama alıyorum bir hata:

ValueError: could not convert string to float: x 

Bu, kwarg 'atlalarının' üstbilgiyi atlamadığını, yorumların ilk satırını atladığını söyler. Skiprows = 3 olduğundan emin olabilirdim, fakat komplikasyon benim çok fazla dosyaya sahip olduğumdan, bunların hepsinin dosyanın üst kısmında aynı sayıda yorumlanmış satır olması gerekmez. Loadtxt kullandığımda gerçek verileri sadece böyle bir durumda aldığımdan nasıl emin olabilirim?

P.S. - Ben de bash çözümlerine açığım.

+0

Ben de ayrıştırmak için Python çeşitli çözümler denedim eklemek gerekir Her satır bir yorum ya da bir karakter için, ama hızlı bir şekilde bu doğanın hiçbiri işe yaramadı çünkü loadtxt en başında başarısız oluyor. – astromax

cevap

12

Atla yorum satırı elle kullanarak jeneratör ifadesi:

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

gibi kendi özel filtre fonksiyonunu oluşturun:

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=',')