2016-09-23 1 views
1

Je veux tracer des nombres en notation scientifique en lisant et en mettant ces nombres dans la liste y. Voici mon code.Comment corriger cette erreur: "ValueError: impossible de convertir la chaîne en float: '-1,89E-09'"?

import matplotlib.pyplot as plt 
import csv 

x = [] 
y = [] 


with open('test1.txt','r') as csvfile: 
    plots = csv.reader(csvfile, delimiter='\t') 
     for row in plots: 
     x.append(float(row[0])) 
     y.append(float(row[1])) 


    plt.plot(x,y, label='20 Volt max with filter') 
    plt.xlabel('time') 
    plt.ylabel('voltage') 
    plt.show() 

Le fichier txt ressemble à ceci:

0 -1,89E-09 
0,001 -1,37E-08 
0,002 -5,69E-08 

L'erreur est:

ValueError: could not convert string to float: '-1,89E-09' 
+0

Veuillez ajouter une étiquette indiquant la langue que vous utilisez. De plus, vous n'avez pas posé de question. –

+0

en utilisant Spyder (Python 3.5) mon problème est que je reçois ValueError: impossible de convertir la chaîne en float: '-1,89E-09' – kevin

+0

Cette information doit être dans la question. Ajouter une balise "python" (il peut y avoir une balise "python3" séparée), et afficher le message d'erreur exact dans la question. (Je suis assez sûr que je sais quel est le problème, mais je ne vais pas encore poster une réponse.) –

Répondre

0

En Python et beaucoup d'autres langues, le séparateur décimal est la norme . (période) non , (virgule).

De Decimal Mark sur Wikipedia:

In 1958, disputes between European and American ISO delegates over the correct representation of the decimal mark nearly stalled the development of the ALGOL computer programming language. ALGOL ended up allowing different decimal marks, but most computer languages and standard data formats (e.g. C, Java, Fortran, Cascading Style Sheets (CSS)) specify a dot.

Vous pouvez modifier le format utilisé dans votre fichier texte, ou vous pouvez float(row[n].replace(",", ".")).

+0

pour la ligne dans les graphiques: float (row [1] .replace (",", ".")) X.append (float (ligne [0])) y.append (float (ligne [1])) mais je obtenir une erreur de syntaxe qu'ai-je fait de mal – kevin

+0

Vous devrez assigner 'float (row [n] .replace (", ",". "))' à une variable – cat

+1

'>>> x.append (float (row [0] .replace (",", "."))) >>> y.append (float (row [1] .replace (",", "."))) '' >>> _merci vous travaillé! _ – kevin