[英]Convert Pandas Dataframe to specific json format
我一直在研究将熊猫数据帧导出到JSON文件中的不同方法,但是我不确定如何在JSON中包含其他字符串“常量”。
目的是吐出一个可由chart.js读取的JSON文件。
该示例的熊猫数据框的格式为:
df = pandas.DataFrame({
"labels" : [1,2,3,4,5],
"data" : [5,4,3,2,1]
})
JSON必需文件的格式为:
{
labels: [1,2,3,4,5],
datasets: [
{
label: "My First dataset",
fillColor: "rgba(220,220,220,0.2)",
strokeColor: "rgba(220,220,220,1)",
pointColor: "rgba(220,220,220,1)",
pointStrokeColor: "#fff",
pointHighlightFill: "#fff",
pointHighlightStroke: "rgba(220,220,220,1)",
data: [5,4,3,2,1]
}
]
}
我可以使用pandas的内置函数将pandas文件导出为JSON,但是我不知道如何分离向量并添加上面看到的常量值。
我建议使用诸如mako或jinja的模板库。 这是一个包含您的JSON的快速mako文件,但是引用了DataFrame
参数df
,当要求DataFrame
呈现文档的最终形式(即包含实际数据)时,该DataFrame
将传递给它。
这是文件"pandas_to_json.mako"
:
<%page args="df"/>
<%
"""Comments about this template file.
"""
# Python imports, helper function definitions, etc.
import pandas
%>
<%text>
{
labels: </%text> ${df.labels.values.tolist()} <%text>,
datasets: [
{
label: "My First dataset",
fillColor: "rgba(220,220,220,0.2)",
strokeColor: "rgba(220,220,220,1)",
pointColor: "rgba(220,220,220,1)",
pointStrokeColor: "#fff",
pointHighlightFill: "#fff",
pointHighlightStroke: "rgba(220,220,220,1)",
data: </%text> ${df.data.values.tolist()} <%text>
}
]
}
</%text>
然后,在名为.py的任何您想要的文件中(我将其称为"pandas_to_json.py"
),您可以运行此文件(与.mako文件位于同一目录中):
import pandas
from mako.template import Template
mako_file_name = "pandas_to_json.mako"
df = pandas.DataFrame({
"labels" : [1,2,3,4,5],
"data" : [5,4,3,2,1]
})
t = Template(filename=mako_file_name)
print t.render(df)
并打印出以下内容:
In [1]: %run pandas_to_json.py
{
labels: [1, 2, 3, 4, 5] ,
datasets: [
{
label: "My First dataset",
fillColor: "rgba(220,220,220,0.2)",
strokeColor: "rgba(220,220,220,1)",
pointColor: "rgba(220,220,220,1)",
pointStrokeColor: "#fff",
pointHighlightFill: "#fff",
pointHighlightStroke: "rgba(220,220,220,1)",
data: [5, 4, 3, 2, 1]
}
]
}
为此,您只需要安装mako。 如果使用conda
软件包管理工具,则此代码对我有用,可以在Ubuntu 13上为Python 2.7安装mako:
conda install -c auto mako
但是您也可以使用pip等其他安装工具,也可以按照mako的安装说明进行操作。
出于某种原因,更基本的conda install mako
无法正常工作,声称在linux-64通道中找不到名为mako
软件包(尽管事实上,在我的第一个命令中使用binstar的“ auto”通道确实有效,但表面上应该如此)等效)。
我也听说过有关Jinja的好消息,并且由于其他原因,它可能更方便,更易于安装/使用或对您更好。 您可能应该先选择两个,然后再使用它们。
这里的重点是, 您可以控制模板渲染过程的生成内容,而不必大胆地为您完成此工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.