2016-07-13 12 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

あなたはStringIOオブジェクトへto_jsonの書き込みがあり、その後、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

関連する問題