Skip to content

Commit 3db108e

Browse files
committed
incorrect fix when dealing with date objects since they do not store microsecond information.
Also added simple test case for checking that fractional seconds are stored
1 parent ed080d9 commit 3db108e

File tree

2 files changed

+13
-4
lines changed

2 files changed

+13
-4
lines changed

pandas/io/pytables.py

+7-4
Original file line numberDiff line numberDiff line change
@@ -713,12 +713,15 @@ def _convert_index(index):
713713
if isinstance(values[0], (datetime, date)):
714714
if isinstance(values[0], datetime):
715715
kind = 'datetime'
716+
converted = np.array([(time.mktime(v.timetuple()) +
717+
v.microsecond / 1E6) for v in values],
718+
dtype=np.float64)
719+
return converted, kind, _tables().Time64Col()
716720
else:
717721
kind = 'date'
718-
converted = np.array([(time.mktime(v.timetuple()) +
719-
v.microsecond / 1E6) for v in values],
720-
dtype=np.float64)
721-
return converted, kind, _tables().Time64Col()
722+
converted = np.array([time.mktime(v.timetuple()) for v in values],
723+
dtype=np.float64)
724+
return converted, kind, _tables().Time64Col()
722725
elif isinstance(values[0], basestring):
723726
converted = np.array(list(values), dtype=np.str_)
724727
itemsize = converted.dtype.itemsize

pandas/io/tests/test_pytables.py

+6
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import os
44
import sys
55

6+
from datetime import datetime
67
import numpy as np
78

89
from pandas import Series, DataFrame, Panel, DateRange, MultiIndex
@@ -466,6 +467,11 @@ def test_legacy_read(self):
466467
store['d']
467468
store.close()
468469

470+
def test_store_datetime_fractional_secs(self):
471+
series = Series([0], [datetime(2012, 1, 2, 3, 4, 5, 123456)])
472+
self.store['a'] = series
473+
self.assertEquals(self.store['a'].index[0].microsecond, 123456)
474+
469475
def curpath():
470476
pth, _ = os.path.split(os.path.abspath(__file__))
471477
return pth

0 commit comments

Comments
 (0)