Ich habe eine extrem große Datei von Tab-getrennte Werte von 10000 + Werte. Ich versuche, die Durchschnittswerte jeder Zeile in den Daten zu finden und diese neuen Werte an eine neue Datei anzufügen. Werte, die nicht gefunden wurden, werden jedoch in der großen Datei als -1 eingegeben. Die Verwendung der -1-Werte bei der Berechnung meiner Durchschnittswerte führt zu einem Datenverlust. Wie kann ich diese Werte ausschließen? Die große Dateistruktur wie folgt aussieht:Berechnen Sie, während -1 ausschließt
"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
In meinem Code Im die letzten drei Elemente zu nehmen und den Durchschnitt nur die drei Werte zu finden. Hier ist meine gesamte Code Wenn die letzten drei Elemente in der Reihe 85 sind, 12, und -1, muss ich den Durchschnitt von 85 und 12 zurück:
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')
Dank. Kommentar, wenn eine Klärung erforderlich ist.
so dass, wenn eine Linie 10 Werte tun sollten, ist, und Zwei von ihnen sind -1, was machen wir? Ersetzen Sie -1 durch 0 und machen Sie avg = sum (row)/10, oder ignorieren wir sie und machen avg = sum (row)/8? – jacoblaw
Ihre Einrückung ist deaktiviert. Warum nehmen Sie nur einen Wert aus jeder Zeile? –
1) Sie müssen die Datei nach dem Öffnen nicht suchen, es ist bereits am Anfang; 2) es gibt keine Notwendigkeit, die zweite Datei zu schließen, da die 'with'-Klausel das für Sie erledigt; 3) Ihre Einrückung ist wahrscheinlich ausgeschaltet, da Ihr Code im aktuellen Zustand nur den Durchschnitt für eine Zeile – ForceBru