簡體   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