2

csv ファイルを列ヘッダーから一連の名前付きタプルに読み込むスクリプトを作成しています。次に、これらの名前付きタプルを使用して、特定の基準を満たすデータ行を取り出します。

入力を処理しました (以下を参照) が、別のファイルに出力する前にデータをフィルタリングする際に問題が発生しています。

import csv
from collections import namedtuple

with open('test_data.csv') as f:
    f_csv = csv.reader(f) #read using csv.reader()
    Base = namedtuple('Base', next(f_csv)) #create namedtuple keys from header row
    for r in f_csv: #for each row in the file
        row = Base(*r) 
        # Process row
        print(row) #print data

私の入力ファイルの内容は次のとおりです。

Locus           Total_Depth     Average_Depth_sample    Depth_for_17
chr1:6484996    1030            1030                    1030
chr1:6484997    14              14                      14
chr1:6484998    0               0                       0

そして、それらは次のように私のコードから出力されます:

Base(Locus='chr1:6484996', Total_Depth='1030', Average_Depth_sample='1030', Depth_for_17='1030') Base(Locus='chr1:6484997', Total_Depth='14', Average_Depth_sample='14', Depth_for_17='14') Base(Locus='chr1:6484998', Total_Depth='0', Average_Depth_sample='0', Depth_for_17='0')

Total_Depth が 15 を超えるレコードのみを抽出できるようにしたいと考えています。

直感的に、次の機能を試しました。

if Base.Total_Depth >= 15 :
    print row

ただし、これはデータの最終行のみを出力します (上記の出力テーブルから)。問題は二重だと思います。私が知る限り、後で参照できるように名前付きタプルをどこにも保存していません。次に、数値は整数ではなく文字列形式で読み取られます。

まず、名前付きタプルをどこかに保存する必要がある場合、誰かが私を修正できますか。

次に、文字列値を整数に変換するにはどうすればよいですか? または、名前付きタプルは不変であるため、これは不可能です。

ありがとう!

以前、辞書に関して同様の質問をしましたが、代わりに名前付きタプルを使用したいと考えています。:)

4

1 に答える 1