2016-07-13 2 views
0

json에 데이터를 써야합니다. 문제는 문자열에 구분 기호를 설정할 수 없다는 것입니다. 내 DF 내가 팬더 : 분할로 json에 데이터 프레임 쓰기

df.groupby('id').apply(lambda x: x.set_index('date')['val'].to_dict()).to_json('nielsen', orient='index') 

를 사용하고 내가 싶어
 id  date val 
0 123 2015-12-12 1 
1 123 2015-12-13 1 
2 123 2015-12-14 0 
3 123 2015-12-15 1 
4 123 2015-12-16 1 
5 123 2015-12-17 0 
6 123 2015-12-18 1 
7 456 2015-12-12 1 
8 456 2015-12-13 1 
9 456 2015-12-14 0 
10 456 2015-12-15 1 

처럼 보이는 내가 그렇게 할 수있는 방법

{ 
"1234567890abcdef1234567890abcdef": { 
    "2016-06": 1, 
    "2016-05": 0, 
    "2016-04": 0, 
    "2016-03": 1, 
    "2016-02": 1, 
    "2016-01": 0 
}, 
"0987654321abcdef1234567890abcdef": { 
    "2016-06": 1, 
    "2016-05": 1, 
    "2016-04": 1, 
    "2016-03": 0, 
    "2016-02": 0, 
    "2016-01": 0 
} 
} 

같은 떨어지게?

답변

2

당신은 JSON로드를 사용하여 다음 StringIO 객체에 to_json 쓰기 및 수/원하는대로 형식을 덤프 :

import pandas as pd 
import StringIO, json 
df = pd.read_csv('data.csv') 
nielson = StringIO.StringIO() 
df.groupby('id').apply(lambda x: x.set_index('date')['val'].to_dict()).to_json(nielson, orient='index') 
print(json.dumps(json.loads(nielson.getvalue()),indent=2)) 

이 생성됩니다

{ 
    "123": { 
    "2015-12-14": 0, 
    "2015-12-15": 1, 
    "2015-12-16": 1, 
    "2015-12-17": 0, 
    "2015-12-12": 1, 
    "2015-12-13": 1, 
    "2015-12-18": 1 
    }, 
    "456": { 
    "2015-12-14": 0, 
    "2015-12-15": 1, 
    "2015-12-12": 1, 
    "2015-12-13": 1 
    } 
} 

다른 서식 옵션에 대한 help(json.dumps)를 참조하십시오.

with open('nielsen','w') as f: 
    json.dump(json.loads(nielson.getvalue()), f, indent=2) 
+0

을하지만 그것은 단지 인쇄와의 : (기본 예제는 아래 그림) 파일로 작성하는 방법에 대한 자세한 내용은 help(json.dump)를 참조하십시오. 파일로 어떻게 변경합니까? – ldevyataykina

+0

편집 된 답변은'json.dump'를 사용하여 파일에 쓰는 것을 설명합니다 – jvd10

+0

당신은 그 것을 순서대로 쓰는 것이 진짜라고 말할 수 있습니까? ''2014-09 ','2013-12 '이라고 쓰지만 역으로 필요합니다 – ldevyataykina