Python 如何格式化pandas数据框,以便在Django中与pandas highcharts一起使用

Python 如何格式化pandas数据框,以便在Django中与pandas highcharts一起使用,python,django,highcharts,Python,Django,Highcharts,我试图在Django项目中使用熊猫海图;我能够生成图形,但是数据没有打印出来,所以我猜我的pandas dataframe格式不正确,或者可能我没有使用正确的方法渲染模板 结果是: 我的数据帧: Entrée d'eau - Archimède - 0013A2004166CFCD timestamp 2016-12-2

我试图在Django项目中使用熊猫海图;我能够生成图形,但是数据没有打印出来,所以我猜我的pandas dataframe格式不正确,或者可能我没有使用正确的方法渲染模板

结果是:

我的数据帧:

                           Entrée d'eau - Archimède - 0013A2004166CFCD
timestamp                                                             
2016-12-23 00:05:18+00:00                                         29.0
2016-12-23 00:05:27+00:00                                         29.0
2016-12-23 00:05:37+00:00                                         29.0
2016-12-23 00:05:47+00:00                                         29.0
2016-12-23 00:05:58+00:00                                         29.0
我的看法是:

from django.shortcuts import render
from data.models import Value
import pandas as pd
from pandas_highcharts.core import serialize

# [...]

df = pd.DataFrame.from_records(
    Value.objects.filter(device=a).values("timestamp", "leak_value"))

df.dropna(inplace=True)  # not sure about this
df.set_index("timestamp", inplace=True)
df.sort_index(inplace=True)
df = df.truncate(
    before=pd.to_datetime(request.POST.get("start")),
    after=pd.to_datetime(request.POST.get("stop")))
df = df.rename(
    index=str,
    columns={"leak_value": "{} - {} - {}".format(
        Room.objects.filter(unit=unit_sel).get(device=a),
        Device.objects.get(address=a).devicetype,
        a)})

print(df.head())  # DEBUG

chart = serialize(
    df=df,
    render_to='Leak Values',
    title="Leak Values",
    output_type='json')

return render(request, "leak_chart.html", context={"chart": chart})
我的模板我在base.html中包括jquery和highcharts:

{% extends "base.html" %}

{% block body %}

    {% load staticfiles %}

    <div id="Leak Values"></div>

    <script type="text/javascript">
      new Highcharts.Chart({{chart|safe}});
    </script>

{% endblock %}
页面来源:

顺便说一下,我还没有找到熊猫海图的标签,我认为我没有创建它的特权。我用的是熊猫海图0.5.2


编辑:这似乎相关,但我无法将答案应用于我的具体情况。

Highcharts中的类别用作axis标签的值。如果要将点的坐标x、y或z指定给类别,应使用类别数组中的类别索引:


我认为在这个例子中,更好的方法是使用x轴的datetime类型,并将x值转换为时间戳。在这种情况下,根本不需要使用类别。

结果表明,我需要更改的只是添加use\u index=False,现在我的数据显示为:

chart = serialize(
            df=final_df,
            render_to='Leak Values',
            title="Leak Values",
            use_index=False,
            output_type='json')

但是时间戳没有显示,所以我想我必须让pandas highcharts按照@Kamil Kulig的建议将它们识别为datetime。

你能检查一下传递给图表的leak\u chart.html的格式吗。。??它是JSON格式吗?这个系列应该是这样的:系列:[{name:'Jane',data:[1,0,4]},{name:'John',data:[5,7,3]}]这是我在生成图形后从页面源代码中提取的:系列:[{data:[2016-12-23 00:05:18+00:00,29.0],[2016-12-23 00:05:27+00,29.0],[2016-12-23 19:11+00:00,29.0]】,yAxis:0,名称:Entr\u00e9e d'eau-Archim\u00e8de-0013A2004166CFCD}]感谢您的回答,这让我找到了如何修复代码以使用图表的精确方法。
chart = serialize(
            df=final_df,
            render_to='Leak Values',
            title="Leak Values",
            use_index=False,
            output_type='json')