2017-10-15 11 views
0

順序付き辞書をcsvに保存し、同じ形式の順序付き辞書にcsvファイルをロードし、編集して元に戻す最も良い方法は何ですか?パンダCSV:csv to orderedDict

次のように私はもともと私のデータを保存し、次のようにここに

gifs_info_list=[] 
gifs_info_list.append(OrderedDict([('ID','aswd'),('class','c1'),('mu',gif["parameters"]["mu"]),('sigma','23'), ('tags', [u'movies', u'hitler']),('flag1',False),('flag2',False),('flag3',False)])) 

は私がorderedDict2CSV

def list_to_csv(mlist, fname): 
    ''' 
    double check this method => where is the header added to the csv? 
    Arguments 
     mlist: A list of orderedDict objects. 
     fname: 
    ''' 
    df = pd.DataFrame(mlist) 
    df.to_csv(fname, sep='\t') 

をしています方法ですこれは、CSVファイルにデータを保存します。

ID class mu sigma tags flag1 flag2 flag3 
0 fdex c1 39.8348689258 2.49703182691 [u'movies', u'hitler'] False False False 
2 11AE c2 38.7252538197 2.23352853216 [u'movie', u'mark millar'] False False False 
3 p9ut c1 37.775785901 2.33519338409 [] False False False 

私はcsvからorderedDictsのリストにデータをロードするCSV2OrderedDictを書く必要がありますそれが作成されたマット。これどうやってするの?

+0

使用をリストに変換したい場合は、 'csv'が必要ですか? jsonに保存できませんか? – jezrael

+0

はい私はcsvが必要です –

答えて

1
def csv_to_list(fname): 
    df = pd.from_csv(fname, index_col=0) 
    return [OrderedDict(row[1]) for row in df.iterrows()] 
1

pd.read_csv機能を使用してcsvファイルを読むことができます。その後、の行に対して、iterrows()メソッドを使用して反復処理を行い、各繰り返しでOrderedDictを作成し、それをリストに追加します。

import pandas as pd 
from collections import OrderedDict 
df = pd.read_csv("data.csv", sep="\t", index_col=0) 
dicts = list() 
for i, row in df.iterrows(): 
    d = OrderedDict(zip(row.index.tolist(), 
         row.tolist())) 
    dicts.append(d) 

出力は次のようになります。

>>> dicts 

[OrderedDict([('ID', 'fdex'), 
       ('class', 'c1'), 
       ('mu', 39.8348689258), 
       ('sigma', 2.49703182691), 
       ('tags', "[u'movies', u'hitler']"), 
       ('flag1', False), 
       ('flag2', False), 
       ('flag3', False)]), 
OrderedDict([('ID', '11AE'), 
       ('class', 'c2'), 
       ('mu', 38.7252538197), 
       ('sigma', 2.23352853216), 
       ('tags', "[u'movie', u'mark millar']"), 
       ('flag1', False), 
       ('flag2', False), 
       ('flag3', False)]), 
OrderedDict([('ID', 'p9ut'), 
       ('class', 'c1'), 
       ('mu', 37.775785901), 
       ('sigma', 2.33519338409), 
       ('tags', '[]'), 
       ('flag1', False), 
       ('flag2', False), 
       ('flag3', False)])] 

EDIT:tagsが文字列ではなく、リストになります。あなたはそれが

import ast 
df['tags'] = df['tags'].apply(lambda x: ast.literal_eval(x)) 
関連する問題