Python 3.x TypeError:类型为'的对象;数据帧';JSON不可序列化

Python 3.x TypeError:类型为'的对象;数据帧';JSON不可序列化,python-3.x,postgresql,pandas,plotly,psycopg2,Python 3.x,Postgresql,Pandas,Plotly,Psycopg2,我试图用从PostgreSQL server获得的一些数据创建一个绘图图,但当我尝试绘制时,我得到了一个错误:“TypeError:类型为'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 date

我试图用从PostgreSQL server获得的一些数据创建一个绘图图,但当我尝试绘制时,我得到了一个错误:“TypeError:类型为'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 server读取的x轴上的日期,然后是y轴上的两个值,表示“正常运行时间”或“停机时间”的值

回溯(最近一次呼叫最后一次):
文件“\\srv31data1\users$\User\Desktop\basic.py”,第37行,在
py.图(图)
文件“C:\Users\User\AppData\Local\Programs\Python36\lib\site packages\plotly\offline\offline.py”,第469行,在plot中
“100%”、“100%”,全局_requirejs=False)
文件“C:\Users\User\AppData\Local\Programs\Python\36\lib\site packages\plotly\offline\offline.py”,第184行,在html中
cls=utils.PlotlyJSONEncoder)
文件“C:\Users\User\AppData\Local\Programs\Python36\lib\json\\ uuu init\uuu.py”,第238行,转储
**千瓦)。编码(obj)
文件“C:\Users\User\AppData\Local\Programs\Python36\lib\site packages\plotly\utils.py”,第161行,编码
编码的o=super(PlotlyJSONEncoder,self)。编码(o)
文件“C:\Users\User\AppData\Local\Programs\Python36\lib\json\encoder.py”,第199行,在encode中
chunks=self.iterencode(o,\u one\u shot=True)
文件“C:\Users\User\AppData\Local\Programs\Python36\lib\json\encoder.py”,第257行,在iterencode中
返回_iterencode(o,0)
默认情况下,文件“C:\Users\User\AppData\Local\Programs\Python\36\lib\site packages\plotly\utils.py”,第229行
返回_json.JSONEncoder.default(self,obj)
默认情况下,文件“C:\Users\User\AppData\Local\Programs\Python36\lib\json\encoder.py”第180行
o、 ________;类_________
TypeError:类型为“DataFrame”的对象不可JSON序列化

编辑:对不起,忘记发布回溯了

您的
df
仍然是一个数据帧,因为您没有将其指定为json

   df = df.to_json()
这应该行得通。如果没有,请告诉我

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())**
    }
}

您也可以进行堆栈后跟踪吗?想知道代码遇到错误的行。刚刚更新了它,谢谢。使用
df.head().to_dict()
更容易。我发现这个方法有很多格式问题,使用
to_dict()
效果更好,并且不会添加随机转义字符。要使每行具有相同的效果,您应该执行以下操作:df['json']=df.apply(lambda x:x.To_json(),axis=1):
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())**
    }
}