タブ区切りの値が10000+以上の非常に大きなファイルがあります。私は、データの各行の平均を見つけて、これらの新しい値を新しいファイルに追加しようとしています。 Howveverでは、見つからなかった値は大きなファイルに-1として入力されます。私の平均を計算する際に-1の値を使用すると、データが乱れることがあります。これらの値をどのように除外することができますか?私のコードイムで-1を除いて計算する
"HsaEX0029886" 100 -1 -1 100 100 100 100 100 100 -1 100 -1 100
"HsaEX0029895" 100 100 91.49 100 100 100 100 100 97.87 95.29 100 100 93.33
"HsaEX0029923" 0 0 0 -1 0 0 0 0 0 9.09 0 5.26 0
最後の3つの要素を取り、ちょうど3つの値の平均を見つける: 大きなファイル構造は次のようになります。行の最後の3つの要素は、85、12であり、-1ならば、私は85と12の平均値を返す必要がここに私の全体のコードは次のとおりです。
with open("PSI_Datatxt.txt", 'rt') as data:
next(data)
lis = [line.strip("\n").split("\t") for line in data] # create a list of lists(each row)
for row in lis:
x = float(row[11])
y = float(row[12])
z = float(row[13])
avrg = ((x + y + z)/3)
with open("DataEditted","a+") as newdata:
if avrg == -1:
continue #skipping lines where all 3 values are -1
else:
newdata.write(str(avrg) + ' ' + '\n')
感謝。明確化が必要な場合はコメントする。
を行う必要がありますし、そのうち2つは-1です、私たちは何をしますか? -1を0に置き換えてavg = sum(row)/ 10するか、またはそれらを無視してavg = sum(row)/ 8を実行しますか? – jacoblaw
インデントがオフです。また、なぜあなたは各列から1つの値を取るだけですか? –
1)オープンした後にファイルを '探す '必要はありません。すでに始まりです。 2) 'with'節があなたのために行うので、2番目のファイルを閉じる必要はありません。 3)インデントがオフになっている可能性があります。現在の状態では、コードは1行の平均しか計算しません。 – ForceBru