Skip to content

Commit 71244f2

Browse files
committed
Merge pull request #834 from lespaul/master
Close #513 Fractional seconds lost in HDFStore for datetime indexes
2 parents 49260b9 + 2ffae3a commit 71244f2

File tree

2 files changed

+15
-7
lines changed

2 files changed

+15
-7
lines changed

pandas/io/pytables.py

+8-7
Original file line numberDiff line numberDiff line change
@@ -710,14 +710,15 @@ def _convert_index(index):
710710
# Let's assume the index is homogeneous
711711
values = np.asarray(index)
712712

713-
if isinstance(values[0], (datetime, date)):
714-
if isinstance(values[0], datetime):
715-
kind = 'datetime'
716-
else:
717-
kind = 'date'
713+
if isinstance(values[0], datetime):
714+
converted = np.array([(time.mktime(v.timetuple()) +
715+
v.microsecond / 1E6) for v in values],
716+
dtype=np.float64)
717+
return converted, 'datetime', _tables().Time64Col()
718+
elif isinstance(values[0], date):
718719
converted = np.array([time.mktime(v.timetuple()) for v in values],
719-
dtype=np.int64)
720-
return converted, kind, _tables().Time64Col()
720+
dtype=np.int32)
721+
return converted, 'date', _tables().Time32Col()
721722
elif isinstance(values[0], basestring):
722723
converted = np.array(list(values), dtype=np.str_)
723724
itemsize = converted.dtype.itemsize

pandas/io/tests/test_pytables.py

+7
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,12 @@ def test_legacy_read(self):
466467
store['d']
467468
store.close()
468469

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

0 commit comments

Comments
 (0)