Ich habe Daten aus einer SQL-Datenbanktabelle extrahiert, hatte aber anhaltende Probleme mit dem Versuch, ein Diagramm zwischen zwei Variablen zu zeichnen. Dies ist auf Konvertierungsprobleme zwischen Datentypen zurückzuführen. Ich habe zuerst erfolgreich einen list
zu einem str
Datentyp konvertiert und jetzt möchte ich es entweder in einen float
/int
/decimal
Typ umwandeln, damit ich es mit matplotlib verwenden kann. Ich fühle mich im Moment fest, da ich die str
Daten zu keinem von ihnen konvertieren kann. Hier findet mein Skript ist:Schwierigkeit beim Konvertieren von Str-Daten in int/float/decimal für das Zeichnen mit Matplolib
import mysql.connector as mariadb
import matplotlib as mpl
mpl.use('Agg')
import numpy as np
import matplotlib.mlab as mlab
import matplotlib.pyplot as plt
from matplotlib import pyplot
from decimal import Decimal
import pandas as pd
mariadb_connection = mariadb.connect(user='user', password='password', database='mydatabase')
cur = mariadb_connection.cursor()
cur.execute("SELECT time, current FROM table1")
current = []
time = []
for row in cur.fetchall():
current.append(int(row[1]))
time.append(str(row[0]))
print(type(time)) #at this point terminal shows it is a list data type
time = pd.to_datetime(time)
print(type(time)) #at this point terminal shows it is a <class 'pandas.core.indexes.datetimes.DatetimeIndex'>data type
print(type(current)) #at this point, terminal shows it is a list data type
current=','.join(str(v) for v in current)
print(type(current)) #at this point, terminal shows it is a str data
current=float(current) #at this point, I get an error stating ValueError: invalid literal for float()
print(type(current))
mariadb_connection.close()
plt.figure()
plt.plot(time, current)
plt.show()
fig.savefig('plot.jpg')
Auf dieses Skript ausgeführt wird, erhalte ich eine Fehlermeldung, ValueError: invalid literal for float(): 51,52,52,53,52,52,53,53,55,54,58,72,63,68,79,140,133,102,116,120,189,196,151,249,277,218,206,210,212,173,194,216,181,166,221,212,175,189,288,300,281,210,266
ich dann die Leitung current=float(current)
-current=int(current)
geändert, um zu versuchen, die str
Daten zu int
Typ konvertieren und es heißt eine weiteren Fehler ValueError: invalid literal for int() with base 10: '51,52,52,53,.....
ich versuchte dann auch meine aktuellen Variablen dezimal Typ zu konvertieren, indem diese Zeile zu current=decimal(current)
ändern, aber ich decimal.InvalidOperation: Invalid literal for Decimal: '51,52,52....
Irgendwelche Ratschläge, wie ich meine current
Werte zu int
/float
/decimal
Typ konvertieren kann?
Aktualisierungen: Die Umwandlungsschritte für die aktuelle Variable müssen nicht durchlaufen werden. Anscheinend reicht es aus, die Integer-Liste mit Pandas-Plotting zu verwenden, um eine Darstellung zu erhalten.
Teilen Sie Ihre Zeichenfolge mit ',' Zeichen verwenden, und jede Zahl in einen int umwandeln. Jetzt versuchst du der Maschine zu sagen "Hey, ich habe eine Zeichenfolge und ich möchte, dass sie eine ganze Zahl ist. Kannst du mir sagen, welche Ganzzahl '51, 52,52,53,52 (...) 'ist? ? ". Nein. Sie müssen Ihren Satz in alle abgelösten Zahlen aufteilen. Und dann werden Sie der Maschine sagen: "Hey, ich habe eine Liste von Zahlen, aber sie sind in Form einer Zeichenfolge. Können Sie sie in tatsächliche Zahlen konvertieren?". – IMCoins
Sie hatten 'current' als eine Liste von ganzen Zahlen in der 'for'-Schleife, dann konvertieren Sie es in eine Zeichenfolge und dann wollen Sie eine Liste von floats ... Keine Notwendigkeit dafür. Verwenden Sie Ihre ursprüngliche Liste von Ganzzahlen – joaquin
@joaquin. Ich denke, Sie beziehen sich auf diese Linie? 'current.append (int (row [1])'. Obwohl ich 'int()' angewendet habe, ist der Datentyp, den ich daraus erhalte, immer noch eine Liste. Daher kann ich das immer noch nicht zum Zeichnen meines Graphen verwenden. – Craver2000