Skip to content

Commit 872d8c5

Browse files
committed
BUG: handle floating point values when storing the index in HDF5, GH #454
1 parent 31f5662 commit 872d8c5

File tree

3 files changed

+17
-4
lines changed

3 files changed

+17
-4
lines changed

pandas/core/common.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -661,7 +661,10 @@ def _asarray_tuplesafe(values, dtype=None):
661661
return result
662662

663663
def is_integer(obj):
664-
return isinstance(obj, (int, np.integer))
664+
return isinstance(obj, (int, long, np.integer))
665+
666+
def is_float(obj):
667+
return isinstance(obj, (float, np.floating))
665668

666669
def is_integer_dtype(arr):
667670
return issubclass(arr.dtype.type, np.integer)

pandas/io/pytables.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
from pandas import (Series, TimeSeries, DataFrame, Panel, LongPanel,
1313
Index, MultiIndex)
1414
from pandas.core.common import adjoin
15+
import pandas.core.common as com
1516
import pandas._tseries as lib
1617

1718
# reading and writing the full object in one go
@@ -724,10 +725,13 @@ def _convert_index(index):
724725
converted = np.array(list(values), dtype=np.str_)
725726
itemsize = converted.dtype.itemsize
726727
return converted, 'string', _tables().StringCol(itemsize)
727-
elif isinstance(values[0], (long, int, np.integer)):
728+
elif com.is_integer(values[0]):
728729
# take a guess for now, hope the values fit
729730
atom = _tables().Int64Col()
730731
return np.asarray(values, dtype=np.int64), 'integer', atom
732+
elif com.is_float(values[0]):
733+
atom = _tables().Float64Col()
734+
return np.asarray(values, dtype=np.float64), 'float', atom
731735
else: # pragma: no cover
732736
raise ValueError('unrecognized index type %s' % type(values[0]))
733737

@@ -749,8 +753,8 @@ def _unconvert_index(data, kind):
749753
index = np.array([date.fromtimestamp(v) for v in data],
750754
dtype=object)
751755

752-
elif kind in ('string', 'integer'):
753-
index = np.array(data, dtype=object)
756+
elif kind in ('string', 'integer', 'float'):
757+
index = np.array(data)
754758
else: # pragma: no cover
755759
raise ValueError('unrecognized index type %s' % kind)
756760
return index

pandas/io/tests/test_pytables.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,12 @@ def test_series(self):
173173
ts = tm.makeTimeSeries()
174174
self._check_roundtrip(ts, tm.assert_series_equal)
175175

176+
def test_float_index(self):
177+
# GH #454
178+
index = np.random.randn(10)
179+
s = Series(np.random.randn(10), index=index)
180+
self._check_roundtrip(s, tm.assert_series_equal)
181+
176182
def test_timeseries_preepoch(self):
177183
if sys.version_info[0] == 2 and sys.version_info[1] < 7:
178184
raise nose.SkipTest

0 commit comments

Comments
 (0)