Pandas CSV:csv to orderedDict

时间:2017-10-15 11:53:06

标签: python pandas csv

将有序字典保存到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列表中。我怎么能这样做?

2 个答案:

答案 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()]