2017-03-10 8 views
-1

Ich habe eine große Matrix in einem gzip, die etwa wie folgt aussieht:Parsen große Datensatz mit Python

locus_1 mark1 0.0,0.0,0.0,0.0,0.0,0.4536,0.8177,0.4929,0.0,0.0 
locus_2 mark2 0.0,0.0,0.0,0.0,0.0,0.5536,0.9177,0.2929,0.0,0.0 
locus_3 mark2 0.0,0.0,0.1,0.0,0.0,0.9536,0.8177,0.2827,0.0,0.0 

So wird jede Zeile beginnt mit zwei Deskriptoren, um 10 Werten.

ich einfach mal die ersten 5 Werte dieser Zeile parsen, so dass ich eine Matrix wie diese:

locus_1 mark1 0.0,0.0,0.0,0.0,0.0 
locus_2 mark2 0.0,0.0,0.0,0.0,0.0 
locus_3 mark2 0.0,0.0,0.1,0.0,0.0 

ich folgenden Python-Skript gemacht habe, dies zu analysieren, aber ohne Erfolg:

import gzip 
import numpy as np 

inFile = gzip.open('/home/anish/data.gz') 

inFile.next() 

for line in inFile: 
     cols = line.strip().replace('nan','0').split('\t') 
     data = cols[2:] 
     data = map(float,data) 

     gfpVals = data[:5] 

     print '\t'.join(cols[:6]) + '\t' + '\t'.join(map(str,gfpVals)) 

ich einfach den Fehler:

data = map(float,data) 
ValueError: could not convert string to float: 
+0

apologies-, dass der Fehler nicht. Der Fehler ist: Daten = Karte (float, Daten) ValueError: ungültiges Literal für float(): –

+0

Wenn Sie dachten, meine Antwort beantwortet Ihre Frage, würde ich es begrüßen, wenn Sie es als die Antwort akzeptiert, so dass diese Frage nicht zu halten erscheint als unbeantwortet. –

+0

[Was sagt Ihnen Ihr Schritt-Debugger?] (Http://stackoverflow.com/questions/25385173/what-isa-debugger-and-how-can-it-help-me-diagnose-problems) –

Antwort

2

Sie sind nur Tabs als Trennzeichen verwenden, während Die Werte sind ebenfalls durch Kommata getrennt.

Als Ergebnis

locus_1 mark1 0.0,0.0,0.0,0.0,0.0,0.4536,0.8177,0.4929,0.0,0.0 

ist gespalten

locus_1 || mark1 || 0.0,0.0,0.0,0.0,0.0,0.4536,0.8177,0.4929,0.0,0.0 

und Sie übergeben die Zeichenfolge

"0.0,0.0,0.0,0.0,0.0,0.4536,0.8177,0.4929,0.0,0.0" 

, die eine ungültige wörtliche ist zu schweben.

sollten Sie ersetzen:

data = cols[2:] 

mit

data = cols[2:].split(',')