[英]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.