2017-10-15 5 views
0

정렬 된 사전을 csv로 저장하고 csv 파일을 동일한 형식의 정렬 된 사전에로드 한 다음 편집하고 다시 저장하는 가장 좋은 방법은 무엇입니까? 다음과 같이Pandas 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의 데이터를 ordersDicts의 목록에로드해야합니다. 매트를 만들었습니다. 어떻게해야합니까?

+0

사용 나열하려면? 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() 메서드를 사용하고 각 반복에서 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가 아닌 문자열 목록이 될 것입니다. 변환 할 경우는`csv`가 필요하십니까

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