Ich führe das folgende Python-Skript aus:
#!/usr/bin/python
import os,sys
from scipy import stats
import numpy as np
f=open('data2.txt', 'r').readlines()
N=len(f)-1
for i in range(0,N):
w=f[i].split()
l1=w[1:8]
l2=w[8:15]
list1=[float(x) for x in l1]
list2=[float(x) for x in l2]
result=stats.ttest_ind(list1,list2)
print result[1]
Ich habe jedoch folgende Fehler erhalten:
ValueError: could not convert string to float: id
Das verwirrt mich. Wenn ich dies nur für eine Zeile im interaktiven Abschnitt versuche, anstatt für eine Schleife mit einem Skript:
>>> from scipy import stats
>>> import numpy as np
>>> f=open('data2.txt','r').readlines()
>>> w=f[1].split()
>>> l1=w[1:8]
>>> l2=w[8:15]
>>> list1=[float(x) for x in l1]
>>> list1
[5.3209183842, 4.6422726719, 4.3788135547, 5.9299061614, 5.9331108706, 5.0287087832, 4.57...]
Es funktioniert gut.
Kann jemand ein wenig darüber erklären? Vielen Dank.
quelle
\n
,\r
.Dieser Fehler ist ziemlich ausführlich:
ValueError: could not convert string to float: id
Irgendwo in Ihrer Textdatei enthält eine Zeile das Wort
id
, das nicht wirklich in eine Zahl umgewandelt werden kann.Ihr Testcode funktioniert, weil das Wort
id
in nicht vorhanden istline 2
.Wenn Sie diese Zeile abfangen möchten, versuchen Sie diesen Code. Ich habe Ihren Code ein bisschen aufgeräumt:
#!/usr/bin/python import os, sys from scipy import stats import numpy as np for index, line in enumerate(open('data2.txt', 'r').readlines()): w = line.split(' ') l1 = w[1:8] l2 = w[8:15] try: list1 = map(float, l1) list2 = map(float, l2) except ValueError: print 'Line {i} is corrupt!'.format(i = index)' break result = stats.ttest_ind(list1, list2) print result[1]
quelle
Vielleicht sind Ihre Zahlen eigentlich keine Zahlen, sondern Buchstaben, die sich als Zahlen tarnen?
In meinem Fall bedeutete die von mir verwendete Schriftart, dass "l" und "1" sehr ähnlich aussahen. Ich hatte eine Saite wie 'l1919', die ich für '11919' hielt, und das hat die Dinge durcheinander gebracht.
quelle
Ihre Daten entsprechen möglicherweise nicht Ihren Erwartungen - es scheint, dass Sie Floats erwarten, aber nicht erhalten.
Eine einfache Lösung, um herauszufinden, wo dies auftritt, besteht darin, der for-Schleife einen try / exception hinzuzufügen:
for i in range(0,N): w=f[i].split() l1=w[1:8] l2=w[8:15] try: list1=[float(x) for x in l1] list2=[float(x) for x in l2] except ValueError, e: # report the error in some way that is helpful -- maybe print out i result=stats.ttest_ind(list1,list2) print result[1]
quelle
Überprüfen Sie die Nummer in der ursprünglichen CSV-Datei, um festzustellen, ob die Nummern ein doppeltes Anführungszeichen enthalten.
quelle
Ich habe die ähnliche Situation mit der Basistechnik unter Verwendung von Pandas gelöst. Laden Sie zuerst die CSV- oder Textdatei mit pandas. Es ist ziemlich einfach
data=pd.read_excel('link to the file')
Stellen Sie dann den Datenindex auf die respektierte Spalte ein, die geändert werden muss. Wenn Ihre Daten beispielsweise eine ID als ein Attribut oder eine Spalte haben, setzen Sie den Index auf ID.
data = data.set_index("ID")
Löschen Sie dann alle Zeilen mit "id" als Wert anstelle der Zahl mit dem folgenden Befehl.
data = data.drop("id", axis=0).
Hoffe, das wird dir helfen.
quelle