Skip to content Skip to sidebar Skip to footer

Import Excel Time Into Pandas With Decimal Seconds

I have an excel spread sheet (.xls) that contains a time column. The time is displayed in Excel as minutes:seconds.tenths of seconds. Such as '50:59.2' '50:59.4'. The raw data c

Solution 1:

Pandas used xlrd to read Excel files and the xlrd.xldate_as_tuple() function to get the date components to feed into datetime.time().

However, xlrd.xldate_as_tuple() only returns seconds and not microseconds so that information is lost to pandas.

For example, say you have an Excel file like this (Number is the same as time but without a format):

Time            Number
0:17:51.000     0.012395833
0:17:51.200     0.012398148
0:17:51.400     0.012400463
0:17:51.600     0.012402778
0:17:52.800     0.012416667
0:17:53.000     0.012418981

Then, if you read the data with the following program:

import xlrd

workbook = xlrd.open_workbook('minutes.xls')
worksheet = workbook.sheet_by_name('Sheet1')

cell =  worksheet.cell(2,0)

# Print the A2 cell value as a number.
print cell.value

# Print the seconds part of the A2 cell value.
print (cell.value * (24*60*60)) % 60

# Print the xldate_as_tuple output.
print xlrd.xldate_as_tuple(cell.value, workbook.datemode)

You get the following output:

0.0123981481481
51.2
(0, 0, 0, 0, 17, 51)

So, the decimal part of the seconds is read (51.2) but not returned by xldate_as_tuple() and thus not available to pandas.

This is the documented behaviour of xldate_as_tuple() but you could submit a feature request or a pull request.

Update: I submitted a fix for this to xlrd.


Post a Comment for "Import Excel Time Into Pandas With Decimal Seconds"