2017-10-15 4 views
0

Was ist der beste Weg, um bestellte Wörterbuch zu CSV zu speichern, laden Sie die CSV-Datei in ein bestelltes Wörterbuch des gleichen Formats, bearbeiten Sie sie und speichern Sie sie zurück.Pandas CSV: csv zu orderedDict

ich ursprünglich meine Daten speichern wie folgt:

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)])) 

hier ist, wie ich orderedDict2CSV tue

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') 

Dies speichert die Daten in csv, wie folgt:

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 

Ich muss CSV2OrderedDict schreiben, das die Daten vom csv in eine Liste von orderedDicts von für dasselbe laden würde Matte, wie es erstellt wurde. Wie kann ich das machen?

+0

Sie benötigen 'csv'? Ist es nicht möglich, in JSON zu speichern? – jezrael

+0

ja ich brauche csv –

Antwort

1
def csv_to_list(fname): 
    df = pd.from_csv(fname, index_col=0) 
    return [OrderedDict(row[1]) for row in df.iterrows()] 
1

Sie können csv Datei mit pd.read_csv Funktion lesen. Dann können Sie über die Zeilen DataFrame mit der Methode iterrows() iterieren. Erstellen Sie in jeder Iteration und hängen Sie sie an die Liste an.

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) 

wird der Ausgang sein:

>>> 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)])] 

EDIT: tags wird eine Zeichenfolge, keine Liste sein. Wenn Sie konvertieren möchten, um es aufzulisten Verwendung

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