将有序字典保存到csv的最佳方法是什么,将csv文件加载到相同格式的有序字典中,编辑它们并保存回来。
我原来保存的数据如下:
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 :(得分:1)
您可以使用csv
功能阅读pd.read_csv
文件。然后,您可以使用DataFrame
方法迭代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)])]
编辑:tags
将是一个字符串,而不是一个列表。如果要将其转换为列表,请使用
import ast
df['tags'] = df['tags'].apply(lambda x: ast.literal_eval(x))
答案 1 :(得分:1)
def csv_to_list(fname):
df = pd.from_csv(fname, index_col=0)
return [OrderedDict(row[1]) for row in df.iterrows()]