在 Django 中使用 Pandas 转 JSON
Posted
技术标签:
【中文标题】在 Django 中使用 Pandas 转 JSON【英文标题】:Struggling with Pandas to JSON in Django 【发布时间】:2014-12-31 06:24:28 【问题描述】:我有以下在 django 视图中创建的 pandas 数据框:
Date Actual ticks
26-Sep-14 20
29-Sep-14 40
15-Oct-14 -10
20-Oct-14 5
使用pandas从csv文件中读取数据,然后转换成json对象,然后发送到django模板中:
df = pd.read_csv('article/DailyStats.csv', usecols=['Date', 'Actual ticks'])
df.to_json()
return render_to_response('article/test.html', 'df': df)
当我尝试在模板中使用 JSON 对象时,现在我遇到了问题:
<script type="text/javascript">
$.getJSON( df , function(data)
//do something
)
</script>
在我的 Chrome 浏览器控制台中,我收到错误:Uncaught SyntaxError: Unexpected Identifier
如果我在浏览器中查看 Sources,我会看到以下内容:
<script type="text/javascript">
$.getJSON( Actual ticks
Date
26-Sep-14 20
29-Sep-14 40
15-Oct-14 -10
20-Oct-14 5, function(data)
)
</script>
我想要的只是一个带有键列表(即:日期)和值(即:“实际刻度”)的 JSON。我猜这与列标题弄乱了一些东西有关。
最终我希望能够遍历 json 以显示日期和相应的值,但在此错误不再发生之前我不能这样做。
非常感谢您的建议。
更新:感谢@Anzel,他指出我没有将 JSON 对象分配给变量。我现在已经做到了,即: df_json = df.to_json()
但生成的 json 无效:
[
[
"26-Sep-14",
20
],
[
"29-Sep-14",
40
],
[
"15-Oct-14",
-10
],
[
"20-Oct-14",
5
]
]
知道如何让它创建一个有效的 JSON 吗?
【问题讨论】:
【参考方案1】:问题是,您没有将 json 对象传递给 render_to_response
,而只是将 df
作为 DataFrame 传递。
# this line, you're calling to_json, but haven't assigned to df itself
df.to_json()
# assign it to df_json (or df if you want), and pass it again to render_to_response
df_json = df.to_json()
return render_to_response('article/test.html', 'df': df_json)
并且在你的模板中,由于你已经传递了 json 对象,你不需要做任何 ajax 调用,只需解析 json 就可以了,像这样 (haven' t 测试过,但应该可以按预期工作),现在更新为|safe
并用@RemcoGerlich 指出的引号括起来:
<script type="text/javascript">
var json_data = JSON.parse(" df_json|safe "); // df if you assign df as the json
// do whatever you want with json_data as usual
</script>
【讨论】:
谢谢@Anzel。我的愚蠢错误。我已经做出改变了。但是生成的 json 无效。我已经更新了原始问题以显示 json 的样子。 @darkpool,我已经更新了我的答案,以涵盖 JavaScript 中您也需要更改的部分。 感谢您的帮助。 JSON 字符串现在有效。我不得不使用 df_json |安全 但它现在仍然有效。我用 JSONLint 检查了它。但由于某种原因,它现在给出了一个错误: Uncaught SyntaxError: Unexpected token o @darkpool,您希望 Date 作为您的密钥之一吗?记住DataFrame.to_json
将转换column -> index -> value,你可能忘记了set_index
。
在您的帮助和@RemcoGerlich 的建议下,它现在正在运行。谢谢!【参考方案2】:
至于您的第二个问题,Django 正在转义字符串,以便在 HTML 中安全使用(不能包含额外的 HTML 或 JavaScript 位)。
要告诉 Django 不要这样做,请使用 safe
模板过滤器。
另外,由于 this 需要成为 JavaScript 中的字符串文字,因此您需要在其周围加上引号:
var json_data = JSON.parse(" df_json|safe ");
【讨论】:
感谢您的帮助。感谢@Anzel 和你自己,它终于可以工作了。 @RemcoGerlich,与|safe
的通话很棒以上是关于在 Django 中使用 Pandas 转 JSON的主要内容,如果未能解决你的问题,请参考以下文章
Django:从 Pandas 到 Django Rest 框架的模型查询集
在javascript中循环遍历python-dictionary-turned-into-json