2017-02-01 4 views
0

sorry, ich bin erst am Anfang und ich verstehe wirklich nicht, was in diesem Plot ist los:Valueerror: kann nicht Zeichenfolge konvertieren zu schweben: Spannung 1

#!/usr/bin/python 
import matplotlib.pyplot as plt 
import numpy as np 
import matplotlib.dates as mdates 


File = open('file.txt', 'r') 
readFile = File.read() 

data = [] 
split_data = readFile.split('\n') 

for line in split_data: 
    split_line = line.split('\t') 
    if len(split_line) == 4: 
      if '[V]' not in line: 
        data.append(line) 


voltage, current, abscurrent, time = np.loadtxt(data, delimiter='\t', unpack=True) 

plt.plot(voltage, current) 

Die datei.txt wie folgt aussieht:

Starttime: 28.11.2016, 12:01:11 

Iterations SMU1: 1 

Configuration: from -2.0V to 2.0V in 0.100V-steps, hold: 0.1s, stop: 0.0s, repeated: 1x 


Voltage 1 Current 1 absCurrent 1 Time 
[V] [A] [A] [s] 

-1.99993e+00 -5.35746e-07 5.35746e-07 4.802936e+02 
-1.89992e+00 -4.82880e-07 4.82880e-07 4.805996e+02 
-1.79997e+00 -4.34462e-07 4.34462e-07 4.809054e+02 
-1.69994e+00 -3.89697e-07 3.89697e-07 4.812115e+02 
-1.59992e+00 -3.48121e-07 3.48121e-07 4.815175e+02 
-1.50000e+00 -3.10000e-07 3.10000e-07 4.818237e+02 

Dann habe ich immer diese Fehlermeldung erhalten:

ValueError: could not convert string to float: Voltage 1 

Wenn ich diese Zeile löschen, wird der graph normaly aufgetragen ... Thanks :)

Antwort

0

Es ist wahrscheinlich, weil diese Zeile vier Registerkarten:

Voltage 1 Current 1 absCurrent 1 Time 

Das ist, was diese condtition für aussieht:

split_line = line.split('\t') 
    if len(split_line) == 4: # Are there four tabs? 

vielleicht Sie können die Tabs mit Leerzeichen ersetzen?

+0

Nein, es gibt nur 3. Ich habe bereits versucht, eine andere Einschränkung [und ‚Voltage‘:] hinzuzufügen , um die Leitung zu beseitigen, aber das Problem bleibt –

0

Es ist eindeutig versucht, diese Zeichenfolge als Float zu interpretieren. Diese Zeile sieht wie eine Kopfzeile aus, aber mit unpack brauchen Sie das nicht.

Sie müssen nur sicherstellen, dass die data Liste es nicht enthält. data sollte nur die Zeilen mit den 4 Floats enthalten. Sie arbeiten bereits viel daran, die anderen Kopfzeilen herauszufiltern. Beende den Job.

Haben Sie während Tests oder Debugging data ausgedruckt?


loadtxt teilt die Datenleitungen auf dem Trennzeichen und wandelt dann jede Zeichenfolge in den Datentyp erforderlich sind. Der Standardwert ist Float.

Out[65]: ['-1.50000e+00', '-3.10000e-07', '3.10000e-07', '4.818237e+02'] 
In [66]: [float(astr) for astr in line.split()] 
Out[66]: [-1.5, -3.1e-07, 3.1e-07, 481.8237] 

In [67]: line='Voltage 1 \t Current 1 \t absCurrent 1 \t Time' 
In [68]: line.split('\t') 
Out[68]: ['Voltage 1 ', ' Current 1 ', ' absCurrent 1 ', ' Time'] 
In [69]: float(_[0]) 
... 
ValueError: could not convert string to float: 'Voltage 1 ' 
+0

Wie ich diese Linie filtern könnte? nein, ich habe es nicht gedruckt .. –

+0

''V' nicht in Linie 'sollte sowohl die' [V] 'Linie und' Voltage 1' Linie überspringen. Oder wenn nötig, Zeilen mit 'Voltage' überspringen. – hpaulj

+0

Es hat funktioniert! vielen Dank :) –

Verwandte Themen