繁体   English   中英

将Pandas Dataframe转换为特定的json格式

[英]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,但是我不知道如何分离向量并添加上面看到的常量值。

我建议使用诸如makojinja的模板库。 这是一个包含您的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM