2016-09-27 12 views
1

私は最初の数行のコメントと実際のデータを含むデータファイルを持っています。パンダ抽出のコメント行

#param1 : val1 
#param2 : val2 
#param3 : val3 
12 
2 
1 
33 
12 
0 
12 
... 

私はpandas.read_csv(filename, comment='#',header=None)としてデータを読むことができます。しかし、私はまた、パラメータ値を読み取るために、コメント行を別々に読みたいと思っています。これまで私はコメント行をスキップしたり削除したりするだけでしたが、コメント行を別々に抽出する方法もありました。

答えて

3

read_csvへの呼び出しでは、実際にはできません。ヘッダーを処理しているだけの場合は、ファイルを開き、コメント行を抽出して処理した後、別の呼び出しでデータを読み込むことができます。

from itertools import takewhile 
with open(filename, 'r') as fobj: 
    # takewhile returns an iterator over all the lines 
    # that start with the comment string 
    headiter = takewhile(lambda s: s.startswith('#'), fobj) 
    # you may want to process the headers differently, 
    # but here we just convert it to a list 
    header = list(headiter) 
df = pandas.read_csv(filename) 
1

このファイルを通常の方法でもう一度読むことができます。各行を読み、パラメータを取得することもできます。

def get_param(filename): 
    para_dic = {} 
    with open(filename,'r') as cmt_file: # open file 
     for line in cmt_file: # read each line 
      if line[0] == '#': # check the first character 
       line = line[1:] # remove first '#' 
       para = line.split(':')  # seperate string by ':' 
       if len(para) == 2: 
        para_dic[ para[0].strip()] = para[1].strip() 
    return para_dic 

この関数は、辞書に含まれるパラメータを返します。

{'param3': 'val3', 'param2': 'val2', 'param1': 'val1'} 
関連する問題