2013-06-17 2 views
6

numpy의 loadtxt 함수를 사용하여 CSV 파일에서 데이터를 가져 오려고 할 때 작은 문제가 있습니다. 여기에 데이터 파일 유형의 샘플이 있습니다.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를 사용할 때 실제 데이터가 이와 같은 상황에서만 발생하는지 확인할 수 있습니까?

P. - 나는 배쉬 솔루션에 대해서도 개방적이다.

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