1

I am trying to read and sort a csv file that has data that looks like

Date    Open    High    Low Close   Volume
27-Mar-12   8.25    8.35    8.17    8.19    9801989
26-Mar-12   8.16    8.25    8.12    8.24    8694416
23-Mar-12   8.05    8.12    7.95    8.09    8149170

I do this with

import csv
data = csv.reader(open('data.csv','r'))

To sort data by Date. I do:

sorteddata = sorted(data,key=operator.itemgetter(1),reverse=False)

The problem is, that it sorted the dates by reading them as String and not as dates. So the data is sorted like so,

['3-Aug-11', '7.06', '7.23', '6.84', '7.16', '31583617']
['3-Feb-12', '7.02', '7.12', '6.98', '7.08', '15318044']
['3-Jan-12', '5.53', '5.59', '5.44', '5.48', '12678923']
['3-Jun-11', '8.09', '8.17', '7.92', '7.97', '21273812']
['3-May-11', '9.00', '9.04', '8.63', '8.80', '17356005']

Does anybody know how to sort by dates?

2 Answers 2

8

Use datetime.strptime to get a datetime from the date field:

from datetime import datetime

data = sorted(data, key = lambda row: datetime.strptime(row[0], "%d-%b-%y"))
Sign up to request clarification or add additional context in comments.

1 Comment

+1. Didn't know you could sort on datetime.datetime objects directly - looking at the docs, they do implement the < operator. Excellent.
0

Use the time module for time format conversions, and convert your time strings (3-Aug-11) into numbers you can sort.

Here's some food for thought:

>>> t = time.strptime("3-Aug-11","%d-%b-%y")
>>> t
time.struct_time(tm_year=2011, tm_mon=8, tm_mday=3, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=215, tm_isdst=-1)
>>> time.mktime(t)
1312300800.0

Documentation for time module.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.