2017-02-22 92 views
0

我想繪製使用平行的某些分析結果的座標圖。已經發現使用protovis http://mbostock.github.io/protovis/ex/cars.html,我試圖重新安排我的數據複製數據文件的結構,每例(cars.js)做出了光輝的榜樣。 因此,我的dataframe結構:轉換大熊貓數據幀到定製JSON格式(然後JS對象)

    north ch wwr ach tmin tmax B1_EMS_DH26 
Job_ID               
EP_P1203_000000000 0.0 2.5 40 4.0 24 25  1272.2 
EP_P1203_000000001 0.0 2.5 40 4.0 24 26  1401.9 
EP_P1203_000000002 0.0 2.5 40 4.0 24 27  1642.3 

應該被轉換爲以下:

var results = [ 
{name:"EP_P1203_000000000", north:0.0, ch:2.5, wwr:40, ach:4.0, tmin:24, tmax:25, origin:1272.2}, 
{name:"EP_P1203_000000001", north:0.0, ch:2.5, wwr:40, ach:4.0, tmin:24, tmax:26, origin:1401.9}, 
{name:"EP_P1203_000000002", north:0.0, ch:2.5, wwr:40, ach:4.0, tmin:24, tmax:27, origin:1272.3}, 
{name:"EP_P1203_000000003", north:0.0, ch:2.5, wwr:40, ach:4.0, tmin:24, tmax:28, origin:1642.3}, 
]; 

除了更換我的柱B1_EMS_DH26origin(其似乎是由圖上可以用於設置線顏色),我想不必切片行並手動替換符號。

使用dataframe.to_json命令返回一行:

{"EP_P1203_000000000":{"north":0.0,"ch":2.5,"wwr":40,"ach":4.0,"tmin":24,"tmax":25,"B1_EMS_DH26":1272.2},"EP_P1203_000000001":{"north":0.0,"ch":2.5,"wwr":40,"ach":4.0,"tmin":24,"tmax":26,"B1_EMS_DH26":1401.9},"EP_P1203_000000002":{"north":0.0,"ch":2.5,"wwr":40,"ach":4.0,"tmin":24,"tmax":27,"B1_EMS_DH26":1642.3}} 

它仍然是不完全正確。 你如何建議去做這件事?

回答

1

你的數據框(用於娛樂目的):

df= pd.DataFrame(
    {'north': [0.0, 0.0, 0.0], 
    'B1_EMS_DH26': [1272.2, 1401.9, 1642.3], 
    'tmax': [25, 26, 27], 
    'wwr': [40, 40, 40], 
    'ch': [2.5, 2.5, 2.5], 
    'tmin': [24, 24, 24], 
    'ach': [4.0, 4.0, 4.0] 
    }, 
    index=['EP_P1203_000000000', 'EP_P1203_000000001', 'EP_P1203_000000002'], 
    columns=['north', 'ch', 'wwr', 'ach', 'tmin', 'tmax', 'B1_EMS_DH26']) 

這可能是最糟糕的方式做到這一點,但它的工作原理(我認爲):

import re 
import json 

with open('whatever.json', 'w') as f: 
    f.write('var results = [\n') 
    for k,v in df.drop('B1_EMS_DH26', axis=1).T.to_dict().items(): 
     f.write("{name:"+json.dumps(k)+", "+re.sub(r'[{"\']', '', json.dumps(v))+',\n') 
    f.write('];') 

產地:

var results = [ 
{name:"EP_P1203_000000001", ach: 4.0, north: 0.0, tmax: 26.0, tmin: 24.0, ch: 2.5, wwr: 40.0}, 
{name:"EP_P1203_000000000", ach: 4.0, north: 0.0, tmax: 25.0, tmin: 24.0, ch: 2.5, wwr: 40.0}, 
{name:"EP_P1203_000000002", ach: 4.0, north: 0.0, tmax: 27.0, tmin: 24.0, ch: 2.5, wwr: 40.0}, 
]; 

它將輸出我認爲你正在尋找的結構的文件。如果沒有,請告訴我。我知道可怕的黑客攻擊。擁有先進json體驗的人毫無疑問知道更好的方法。

+0

謝謝你,現在我只需要拿出'''符號出來 – Andreuccio

+0

好吧,這可能看起來很小巧,但'''和'''符號的使用似乎對'.js非常敏感'語法 我試過在你的腳本後面進行替換,但沒有成功。基本上,我需要''EP_P1203_000000001'' - >''EP_P1203_000000001「','EP_P1203_000000002'' - >'」EP_P1203_000000002「'和所有其他'「'消失(即'」 ach'' - >'ach',''north'' - >'north'等。) – Andreuccio

+1

我修改了我的答案我不知道你需要什麼格式它。或者如果你是從控制檯打印的話,我把它寫到文件中了,另外,列的順序是否重要? – Jarad