J'essaie de créer un graphique de complot avec certaines données de mon serveur PostgreSQL, mais lorsque j'essaie de représenter graphiquement, un message d'erreur s'affiche: "TypeError: un objet de type" DataFrame "n'est pas sérialisable JSON"
Voici le code jusqu'à présent:
import dash
import numpy as np
import pandas as pd
import plotly.offline as py
import plotly.graph_objs as go
import psycopg2 as pg2
import datetime
conn = pg2.connect(database='X',user='X',password=secret)
cur = conn.cursor()
cur.execute("SELECT * FROM times;")
a = cur.fetchall()
str(a)
df = pd.DataFrame([[ij for ij in i] for i in a])
df.to_json()
df.rename(columns={0: "Serial Number", 1: "Status", 2: "Date", 3: "Time", 4: "Number"}, inplace=True);
x = df["Date"]
data = [go.Scatter(
x=x,
y=df["Status"])]
layout = go.Layout(title="Server Data Visualization",
xaxis = dict(
range = [df.head(1),
df.tail(1)]),
yaxis=dict(title = "Status"))
fig = go.Figure(data = data, layout = layout)
py.plot(fig)
Le df ["Date"] est la date au format "2018-08-03" et le df ["Statut"] est "Uptime" ou "Temps mort".
Quelqu'un peut-il me dire ce que je fais mal? J'essaie de faire en sorte que ce graphique soit essentiellement une date sur l'axe des x lue sur le serveur SQL, puis deux valeurs sur l'axe des y qui représentent la valeur de "temps de disponibilité" ou de "temps d'indisponibilité".
Traceback (most recent call last):
File "\\srv31data1\users$\User\Desktop\basic.py", line 37, in <module>
py.plot(fig)
File "C:\Users\User\AppData\Local\Programs\Python\Python36\lib\site-packages\plotly\offline\offline.py", line 469, in plot
'100%', '100%', global_requirejs=False)
File "C:\Users\User\AppData\Local\Programs\Python\Python36\lib\site-packages\plotly\offline\offline.py", line 184, in _plot_html
cls=utils.PlotlyJSONEncoder)
File "C:\Users\User\AppData\Local\Programs\Python\Python36\lib\json\__init__.py", line 238, in dumps
**kw).encode(obj)
File "C:\Users\User\AppData\Local\Programs\Python\Python36\lib\site-packages\plotly\utils.py", line 161, in encode
encoded_o = super(PlotlyJSONEncoder, self).encode(o)
File "C:\Users\User\AppData\Local\Programs\Python\Python36\lib\json\encoder.py", line 199, in encode
chunks = self.iterencode(o, _one_shot=True)
File "C:\Users\User\AppData\Local\Programs\Python\Python36\lib\json\encoder.py", line 257, in iterencode
return _iterencode(o, 0)
File "C:\Users\User\AppData\Local\Programs\Python\Python36\lib\site-packages\plotly\utils.py", line 229, in default
return _json.JSONEncoder.default(self, obj)
File "C:\Users\User\AppData\Local\Programs\Python\Python36\lib\json\encoder.py", line 180, in default
o.__class__.__name__)
TypeError: Object of type 'DataFrame' is not JSON serializable
Edit: Désolé, j'ai oublié de poster le suivi!
Votre df
est toujours un bloc de données car vous ne l'avez pas assigné comme json.
df = df.to_json()
Cela devrait marcher. Faites le moi savoir si non.