2

2列のCSVファイルを実行する方法に興味があります。一方の列が昇順で、もう一方の列が降順であり、理解しやすい日付形式に解析する必要があります。

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

1 に答える 1

2

従来のアプローチは、Pythonの並べ替えが安定しているという事実に依存し、2回並べ替えることです(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))
于 2012-12-07T10:49:13.080 に答える