2013-06-17 4 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.S. - 私はbashソリューションも公開しています。

+0

私はまた私がパースするPythonで、さまざまなソリューションを試みたことを追加する必要が各行はコメントまたは文字のいずれかであるが、loadtxtが最初から失敗しているため、この性質は何の役にも立たないことをすぐに認識していた。 – 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=',') 
関連する問題