2017-02-22 10 views
0

Я хотел бы построить результат определенного анализа с использованием диаграммы параллельных координат. Найдя блестящий пример, сделанный с использованием protovis http://mbostock.github.io/protovis/ex/cars.html, и я пытаюсь перенастроить свои данные для репликации структуры файла данных в соответствии с примером (cars.js). Следовательно, моя dataframe структура:Преобразование данных pandas в пользовательский формат 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_DH26 в origin (который, кажется, будет использоваться диаграммы, чтобы установить линию цвета), я бы не хотел, чтобы нарезать строки и заменять символы вручную.

Использование 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

Вашего DataFrame (для отдыха-целей):

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

ok, это, вероятно, выглядит очень мелким, но использование символов типа' '' и '' 'представляется очень чувствительным для' .js 'синтаксис. Я попытался выполнить замены после того, как ваш скрипт был добавлен, но безуспешно. По сути, мне понадобится« EP_P1203_000000001'' -> »« EP_P1203_000000001 »,« EP_P1203_000000002'' -> «EP_P1203_000000002» и все остальные '' 'исчезают (т.е.' 'ach'' ->' ach', ''north'' ->' north' и т.д.) – Andreuccio

+1

Я изменил свой ответ. Я не уверен, какой формат вам нужен в или если вы печатаете его с консоли.Я написал его в файл.Кроме того, имеет ли порядок заказа столбцов? – Jarad

Смежные вопросы