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
ただし、これはデータの最終行のみを出力します (上記の出力テーブルから)。問題は二重だと思います。私が知る限り、後で参照できるように名前付きタプルをどこにも保存していません。次に、数値は整数ではなく文字列形式で読み取られます。
まず、名前付きタプルをどこかに保存する必要がある場合、誰かが私を修正できますか。
次に、文字列値を整数に変換するにはどうすればよいですか? または、名前付きタプルは不変であるため、これは不可能です。
ありがとう!
以前、辞書に関して同様の質問をしましたが、代わりに名前付きタプルを使用したいと考えています。:)