Python 如何格式化pandas数据框,以便在Django中与pandas highcharts一起使用
我试图在Django项目中使用熊猫海图;我能够生成图形,但是数据没有打印出来,所以我猜我的pandas dataframe格式不正确,或者可能我没有使用正确的方法渲染模板 结果是: 我的数据帧: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
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')