Skip to content

Commit ea22a22

Browse files
committed
BUG: when trying to use an out-of-bounds date as an object dtype (GH5312)
1 parent fa8735d commit ea22a22

File tree

3 files changed

+11
-2
lines changed

3 files changed

+11
-2
lines changed

doc/source/release.rst

+1
Original file line numberDiff line numberDiff line change
@@ -636,6 +636,7 @@ Bug Fixes
636636
- Fix ``Series.isin`` with date/time-like dtypes (:issue:`5021`)
637637
- C and Python Parser can now handle the more common multi-index column format
638638
which doesn't have a row for index names (:issue:`4702`)
639+
- Bug when trying to use an out-of-bounds date as an object dtype (:issue:`5312`)
639640

640641
pandas 0.12.0
641642
-------------

pandas/core/internals.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -1789,14 +1789,15 @@ def make_block(values, items, ref_items, klass=None, ndim=None, dtype=None, fast
17891789
if np.prod(values.shape):
17901790
flat = values.ravel()
17911791
inferred_type = lib.infer_dtype(flat)
1792-
if inferred_type == 'datetime':
1792+
if inferred_type in ['datetime','datetime64']:
17931793

17941794
# we have an object array that has been inferred as datetime, so
17951795
# convert it
17961796
try:
17971797
values = tslib.array_to_datetime(
17981798
flat).reshape(values.shape)
1799-
klass = DatetimeBlock
1799+
if issubclass(values.dtype.type, np.datetime64):
1800+
klass = DatetimeBlock
18001801
except: # it already object, so leave it
18011802
pass
18021803

pandas/tests/test_series.py

+7
Original file line numberDiff line numberDiff line change
@@ -539,6 +539,13 @@ def test_constructor_dtype_datetime64(self):
539539
self.assertRaises(
540540
TypeError, lambda x: Series(dates, dtype='datetime64'))
541541

542+
# invalid dates can be help as object
543+
result = Series([datetime(2,1,1)])
544+
self.assert_(result[0] == datetime(2,1,1,0,0))
545+
546+
result = Series([datetime(3000,1,1)])
547+
self.assert_(result[0] == datetime(3000,1,1,0,0))
548+
542549
def test_constructor_dict(self):
543550
d = {'a': 0., 'b': 1., 'c': 2.}
544551
result = Series(d, index=['b', 'c', 'd', 'a'])

0 commit comments

Comments
 (0)