From 46a0f3853fd69d11c4ed28c1f7325969e29ac39f Mon Sep 17 00:00:00 2001 From: yui-knk Date: Thu, 21 Jul 2016 01:58:14 +0900 Subject: [PATCH] BUG: Fix pd.Timedelta(None) to return NaT. Before this commit pd.Timedelta raised ValueError when None is passed. This behavior is inconsistent because * pd.Timestamp(None) and pd.Period(None) return NaT * pd.Timedelta returns NaT if '', 'nat', 'NAT' or np.nan is passed --- doc/source/whatsnew/v0.19.0.txt | 1 + pandas/tseries/tests/test_timedeltas.py | 2 ++ pandas/tslib.pyx | 4 ++-- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/doc/source/whatsnew/v0.19.0.txt b/doc/source/whatsnew/v0.19.0.txt index 646e8822ed46f..3839acaed15e6 100644 --- a/doc/source/whatsnew/v0.19.0.txt +++ b/doc/source/whatsnew/v0.19.0.txt @@ -755,3 +755,4 @@ Bug Fixes - Bug where ``pd.read_gbq()`` could throw ``ImportError: No module named discovery`` as a result of a naming conflict with another python package called apiclient (:issue:`13454`) - Bug in ``Index.union`` returns an incorrect result with a named empty index (:issue:`13432`) - Bugs in ``Index.difference`` and ``DataFrame.join`` raise in Python3 when using mixed-integer indexes (:issue:`13432`, :issue:`12814`) +- Bug in ``pd.Timedelta(None)`` raises ``ValueError``. This is different from ``pd.Timestamp(None)`` (:issue:`13687`) diff --git a/pandas/tseries/tests/test_timedeltas.py b/pandas/tseries/tests/test_timedeltas.py index 659101cb4cad2..0bdf8590ec487 100644 --- a/pandas/tseries/tests/test_timedeltas.py +++ b/pandas/tseries/tests/test_timedeltas.py @@ -188,6 +188,8 @@ def test_construction(self): self.assertEqual(Timedelta('').value, iNaT) self.assertEqual(Timedelta('nat').value, iNaT) self.assertEqual(Timedelta('NAT').value, iNaT) + self.assertEqual(Timedelta(None).value, iNaT) + self.assertEqual(Timedelta(np.nan).value, iNaT) self.assertTrue(isnull(Timedelta('nat'))) # offset diff --git a/pandas/tslib.pyx b/pandas/tslib.pyx index 5f487eedd1683..bc42adbab62b1 100644 --- a/pandas/tslib.pyx +++ b/pandas/tslib.pyx @@ -2592,10 +2592,10 @@ class Timedelta(_Timedelta): """ - def __new__(cls, object value=None, unit=None, **kwargs): + def __new__(cls, object value=_no_input, unit=None, **kwargs): cdef _Timedelta td_base - if value is None: + if value is _no_input: if not len(kwargs): raise ValueError("cannot construct a Timedelta without a value/unit or descriptive keywords (days,seconds....)")