繁体   English   中英

熊猫CSV:csv到orderedDict

[英]Pandas CSV: csv to orderedDict

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

您可以使用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))
def csv_to_list(fname):
    df = pd.from_csv(fname, index_col=0)
    return [OrderedDict(row[1]) for row in df.iterrows()]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM