2017-10-15 57 views
0

將有序字典保存到csv的最佳方式是,將csv文件加載到相同格式的有序字典中,編輯並保存。熊貓CSV:csv到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 

我需要編寫CSV2OrderedDict,它可以將csv中的數據加載到相同的orderedDicts列表中墊子,因爲它被創建。我怎樣才能做到這一點?

+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()方法迭代DataFrame行,在每次迭代中創建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)])] 

編輯:tags將是一個字符串,而不是一個列表。如果你想將其轉換爲列表中使用

import ast 
df['tags'] = df['tags'].apply(lambda x: ast.literal_eval(x))