6

ああ、私はいくつかの大きな CSV ファイルをフィルタリングする Python スクリプトを書いています。

基準を満たす行のみを保持したい。

私の入力は、次の形式の CSV ファイルです

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

Total_Depth が 0 の行を返したい。

私はこの回答に従ってデータを読んでいます。しかし、行を解析して私の条件に合った行を引き出そうとして立ち往生しています。

これが私がこれまでに持っているコードです:

import csv

f = open("file path", 'rb')
reader = csv.reader(f) #reader object which iterates over a csv file(f)
headers = reader.next() #assign the first row to the headers variable
column = {} #list of columns
for h in headers: #for each header
    column[h] = []
for row in reader: #for each row in the reader object
    for h, v in zip(headers, row): #combine header names with row values (v) in a series of tuples
        column[h].append(v) #append each value to the relevant column

データが辞書形式になっていることを理解しています。「Total_Depth」キーに基づいてフィルター処理したいのですが、これを行う方法がわかりません。「if」ステートメントを使用して関連する行を選択することを目指していますが、辞書構造でこれを行う方法がわかりません。

アドバイスをいただければ幸いです。SB :)

4

3 に答える 3

2

zip の完全な結果を保存する場合は、割り当てる前に適切なヘッダーを確認できます。

...
for row in reader: #for each row in the reader object
    r = zip(headers, row):
    if r['Total_Depth'] == 0:
        for h, v in r:
            column[h].append(v)
于 2013-06-21T15:14:23.200 に答える
1

使用しているリストのディクショナリは、 Cの並列リストをいじる必要があるため、行操作を非常に困難にします。名前付きタプルは、表形式のデータを収集して操作するためのはるかに便利な方法です。

他の答えは、あなたが抱えている正確な問題を満たしています。より使いやすいデータ構造を使用すると、明日発生する問題に役立ちます。

于 2013-06-21T15:16:37.793 に答える