Skip to content

Commit 12e6fe5

Browse files
committed
Merge pull request #10776 from kawochen/BUG-FIX-10747
BUG: GH10747 where cast_to_nanoseconds from NaT fails
2 parents e945d7e + 140995e commit 12e6fe5

File tree

3 files changed

+13
-3
lines changed

3 files changed

+13
-3
lines changed

doc/source/whatsnew/v0.17.0.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -632,4 +632,5 @@ Bug Fixes
632632
- Bug in ``pd.DataFrame`` when constructing an empty DataFrame with a string dtype (:issue:`9428`)
633633
- Bug in ``pd.unique`` for arrays with the ``datetime64`` or ``timedelta64`` dtype that meant an array with object dtype was returned instead the original dtype (:issue: `9431`)
634634
- Bug in ``DatetimeIndex.take`` and ``TimedeltaIndex.take`` may not raise ``IndexError`` against invalid index (:issue:`10295`)
635+
- Bug in ``Series([np.nan]).astype('M8[ms]')``, which now returns ``Series([pd.NaT])`` (:issue:`10747`)
635636
- Bug in ``PeriodIndex.order`` reset freq (:issue:`10295`)

pandas/tseries/tests/test_timeseries.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3291,6 +3291,12 @@ def test_NaT_scalar(self):
32913291
series[2] = val
32923292
self.assertTrue(com.isnull(series[2]))
32933293

3294+
def test_NaT_cast(self):
3295+
# GH10747
3296+
result = Series([np.nan]).astype('M8[ns]')
3297+
expected = Series([NaT])
3298+
assert_series_equal(result, expected)
3299+
32943300
def test_set_none_nan(self):
32953301
self.series[3] = None
32963302
self.assertIs(self.series[3], NaT)

pandas/tslib.pyx

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3253,9 +3253,12 @@ def cast_to_nanoseconds(ndarray arr):
32533253

32543254
unit = get_datetime64_unit(arr.flat[0])
32553255
for i in range(n):
3256-
pandas_datetime_to_datetimestruct(ivalues[i], unit, &dts)
3257-
iresult[i] = pandas_datetimestruct_to_datetime(PANDAS_FR_ns, &dts)
3258-
_check_dts_bounds(&dts)
3256+
if ivalues[i] != NPY_NAT:
3257+
pandas_datetime_to_datetimestruct(ivalues[i], unit, &dts)
3258+
iresult[i] = pandas_datetimestruct_to_datetime(PANDAS_FR_ns, &dts)
3259+
_check_dts_bounds(&dts)
3260+
else:
3261+
iresult[i] = NPY_NAT
32593262

32603263
return result
32613264

0 commit comments

Comments
 (0)