2017-10-08 19 views
1

私はデータフレームを扱うためにパンダを使用しています。私が作成するデータフレームは、次のようになります。[id, vector] ここで、idは型stringで、ベクトルは型辞書です。Pythonはcsvに辞書を書き、csvから辞書を読む

今私はcsvファイルに書き込むとき、行が(csvファイルに)次のようになります。

25377bc2-d3b6-4699-a466-6b9f544e8ba3 {u'sport>sports event>world championship': 0.5058, u'sport>sports event': 0.7032, u'sport>soccer': 0.6377, u'lifestyle and leisure>game': 0.4673, u'sport>sports event>world cup': 0.6614, u'sport>sports event>international tournament': 0.454, u'sport>sports event>national tournament': 0.541, u'sport': 0.9069, u'sport>sports organisations>international federation': 0.5046, u'sport>sports organisations': 0.6982}  

私はパンダのデータフレームに戻ってcsvファイルからそれを読み込もうとしましたが、ときに私ました以前はdictだったベクトルのタイプを見てください。それは今では<type 'str'>です。

私はピクルスで解決でき、そのパンダのデータフレームをピクルスファイルに保存できます。しかし、私はあなたがdictsを保存するためのcsvとして、より良い構造が何であるかjsonを使用することができると思う(その中のベクトルはタイプ辞書である場合)、正しく

+0

'json'に保存できますか? – jezrael

+0

はい。私もjsonの解決策を見て嬉しく思います。あなたのお勧めは喜んで聞こえます –

答えて

2

をcsvファイルを読むための方法があります。書き込み使用to_jsonについては、パラメータorient='records'read_jsonを読むための

、コメントに感謝piRSquared

df = pd.DataFrame({'vector':[{'a':1, 'b':3}, {'a':4, 'b':6}], 'ID':[2,3]}) 
print (df) 
    ID   vector 
0 2 {'b': 3, 'a': 1} 
1 3 {'b': 6, 'a': 4} 

df.to_json('file.json', orient='records') 
    ID   vector 
0 2 {'b': 3, 'a': 1} 
1 3 {'b': 6, 'a': 4} 

df = pd.read_json('file.json', orient='records') 
print (df) 

print (df.applymap(type)) 
       ID   vector 
0 <class 'int'> <class 'dict'> 
1 <class 'int'> <class 'dict'> 

EDIT1:

列の必要同じ順番であれば、インデックス値を使用します。

df.to_json('file.json', orient='split') 

df = pd.read_json('file.json', orient='split') 
+0

'json'が' id'と 'vector'キーだけを持っているので' orient = 'records''がもっと適切かもしれないと思います。 – piRSquared

+0

@EranMoshe - 私にとってはうまく働いていますが、私のソリューションでは実際のデータに問題がありますか? – jezrael

+0

私はorient = 'records'とwithoutの両方でそれをチェックしました。ありがとう。 –

関連する問題