TypeError: Объект типа "DataFrame" не является сериализуемым JSON

Я пытаюсь создать графический график с некоторыми данными, которые у меня есть на моем сервере PostgreSQL, но когда я пытаюсь построить граф, я получаю сообщение об ошибке: "TypeError: Object type" DataFrame "не является сериализуемым JSON",

Здесь код пока:

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)

Df ["Дата"] - это дата в формате "2018-08-03", а df ["Статус"] - "Время ожидания" или "Время простоя".

Может ли кто-нибудь сказать мне, что я делаю неправильно? Я пытаюсь, чтобы этот график в основном был датами на оси х, читаемой с сервера sql, а затем двумя значениями по оси y, которые представляют либо значение "Uptime", либо "Время простоя".

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

Редактировать: Извините, забыл опубликовать трассировку!

Ответ 1

Ваш df по-прежнему является фреймом данных, потому что вы не назначили его как json.

   df = df.to_json()

Это должно сработать. Дайте мне знать, если нет.

Ответ 2

df = pd.read_csv(data)
    return_data = {
        "status": 1,
        "message": "Raw Data List with pagination",
        "data": {
            "is_header": is_header,
            "head": **json.loads(df.head().to_json())**
        }
    }

enter image description here