2017-10-15 55 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))