2017-02-22 4 views
0

평행 좌표계를 사용하여 특정 분석 결과를 플로팅하고 싶습니다. protovis http://mbostock.github.io/protovis/ex/cars.html을 사용하여 만든 훌륭한 예제를 발견하고 예제 (cars.js)에 따라 데이터 파일의 구조를 복제하기 위해 데이터를 재 배열하려고합니다. 그러므로 내 dataframe 구조 :팬더 데이터 프레임을 JSON 형식으로 사용자 정의 JSON 형식으로 변환

    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 

는 다음으로 변환되어야한다

라인을 설정하는 그래프에 의해 이용 될 것으로 보인다 origin로 내 열 B1_EMS_DH26의 여분 (이외
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}, 
]; 

색상), 행을 자르고 기호를 수동으로 바꾸지 않아도됩니다.

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

이것은 매우 사소한 것 같습니다. 그러나'''및'''와 같은 기호의 사용은 .js에 대해 매우 민감합니다. '구문. 스크립트를 추가 한 후 대체를 수행했지만 성공하지 못했습니다. 본질적으로''EP_P1203_000000001'' ->''''EP_P1203_000000001'',''EP_P1203_000000002'' ->' "EP_P1203_000000002"'및 다른 모든'''이 사라질 것입니다 (예 :''ach'',''북쪽''''''북쪽). – Andreuccio

+1

내 대답을 수정했습니다. 어떤 형식이 필요한지 잘 모르겠습니다. 또는 콘솔에서 인쇄하는 경우 파일에 썼습니다. 또한 열 순서가 중요합니까? – Jarad

관련 문제