2012-12-07 2 views
2

한 열이 오름차순이고 다른 열이 내림차순 인 CSV 파일의 두 열 정렬을 수행하는 방법을 알고 싶습니다. 이해할 수있는 날짜 형식으로 파싱되어야합니다.두 열 CSV 데이터 정렬 - 한 열 str (오름차순) 다른 열 날짜 (내림차순)

import operator 
import csv 
import dateutil.parser as dparser 

reader = csv.reader(open("2002_NASDAQ.csv"), delimiter=",") 

sortedlist = sorted(reader, key=lambda k: (k[0], dparser.parse(k[1])), reverse=True) 

with open('2002_NASDAQ_out.csv', 'wb') as f: 
    csv.writer(f).writerows(sortedlist) 

구문 분석을 제거하면 스크립트가 오류없이 실행됩니다. 그러나 적절한 형식의 날짜가 없으면 결과가 원하는대로 표시되지 않습니다 (시세 - 오름차순, 날짜 - 오름차순).

''' Sample sample.csv data 
AAME,01-Jan-2002,2.204,2.204,2.204,2.204,0 
AAON,01-Jan-2002,7.254,7.254,7.254,7.254,0 
AAPL,01-Jan-2002,10.95,10.95,10.95,10.95,0 
AAME,02-Jan-2002,5.71,5.71,5.71,5.71,0 
AAON,02-Jan-2002,11.125,11.125,11.125,11.125,0 
AAPL,02-Jan-2002,13.85,13.85,13.85,13.85,0 
AAME,03-Jan-2002,28.82,28.82,28.82,28.82,0 
AAON,03-Jan-2002,15.82,15.82,15.82,15.82,0 
AAPL,03-Jan-2002,1.725,1.725,1.725,1.725,0 
AAME,04-Jan-2002,5.3333,5.3333,5.3333,5.3333,0 

''' Example sorted.csv data 
AAME,04-Jan-2002,5.3333,5.3333,5.3333,5.3333,0 
AAME,03-Jan-2002,28.82,28.82,28.82,28.82,0 
AAME,02-Jan-2002,5.71,5.71,5.71,5.71,0 
AAME,01-Jan-2002,2.204,2.204,2.204,2.204,0 
AAON,03-Jan-2002,15.82,15.82,15.82,15.82,0 
AAON,02-Jan-2002,11.125,11.125,11.125,11.125,0 
. 
. 
. 
AAPL,03-Jan-2002,1.725,1.725,1.725,1.725,0 
''' 

답변

2

전통적인 접근 방식은 파이썬의 종류가 안정적이라는 사실에 의존하고 두 번 정렬 할 수있다 (두 번째 키를주의 첫째 완료) :

a = sorted(something, key=itemgetter(1), reverse=True) 
a.sort(key=itemgetter(0)) 

예를

>>> a = [ (1, 2), (0, 1), (2, 1), (2, 7) ] 
>>> a.sort(key=itemgetter(1), reverse=True) 
>>> a.sort(key=itemgetter(0)) 
>>> a 
[(0, 1), (1, 2), (2, 7), (2, 1)] 

테스트되지 않음

sortedlist = sorted(reader, key=lambda L: dparser.parse(L[1]), reverse=True) 
sortedlist.sort(key=itemgetter(0)) 
+0

존 감사합니다. 나는 그 논리를 이해한다. 그것을 구현할 때 dpaser.parse 줄에서 알 수없는 문자열 오류가 발생합니다. –

+0

@ Dr.EMG 그게 뭐죠? –

+0

sortedlist = sorted (reader, key = lambda L : dparser.parse (L [1]), reverse = True) 파일 "C : \ pysci17 \ lib \ site-packages \ dateutil \ parser.py ", 줄 697에서 구문 반환합니다 DEFAULTPARSER.parse (timestr, ** kwargs) 파일"C : \ pysci17 \ lib \ site-packages \ dateutil \ parser.py "구문 303, 구문 raise ValueError, "unknown string format" ValueError : 알 수없는 문자열 형식 –