diff --git a/RELEASE.rst b/RELEASE.rst index 8e4bdd3cba268..500ba2df1ed47 100644 --- a/RELEASE.rst +++ b/RELEASE.rst @@ -159,6 +159,7 @@ pandas 0.11.1 - ``read_html`` now defaults to ``None`` when reading, and falls back on ``bs4`` + ``html5lib`` when lxml fails to parse. a list of parsers to try until success is also valid + - more consistency in the to_datetime return types (give string/array of string inputs) (GH3888_) **Bug Fixes** @@ -355,6 +356,8 @@ pandas 0.11.1 .. _GH3911: https://github.com/pydata/pandas/issues/3911 .. _GH3912: https://github.com/pydata/pandas/issues/3912 .. _GH3764: https://github.com/pydata/pandas/issues/3764 +.. _GH3888: https://github.com/pydata/pandas/issues/3888 + pandas 0.11.0 ============= diff --git a/pandas/core/generic.py b/pandas/core/generic.py index 16b3176521e28..2bbb0da9af658 100644 --- a/pandas/core/generic.py +++ b/pandas/core/generic.py @@ -1159,9 +1159,13 @@ def truncate(self, before=None, after=None, copy=True): ------- truncated : type of caller """ - from pandas.tseries.tools import to_datetime - before = to_datetime(before) - after = to_datetime(after) + + # if we have a date index, convert to dates, otherwise + # treat like a slice + if self.index.is_all_dates: + from pandas.tseries.tools import to_datetime + before = to_datetime(before) + after = to_datetime(after) if before is not None and after is not None: if before > after: diff --git a/pandas/tseries/tests/test_timeseries.py b/pandas/tseries/tests/test_timeseries.py index bdc603dfdea31..51097cd157b99 100644 --- a/pandas/tseries/tests/test_timeseries.py +++ b/pandas/tseries/tests/test_timeseries.py @@ -825,13 +825,36 @@ def test_nat_scalar_field_access(self): self.assertEquals(NaT.weekday(), -1) - def test_to_datetime_empty_string(self): + def test_to_datetime_types(self): + + # empty string result = to_datetime('') - self.assert_(result == '') + self.assert_(result is NaT) result = to_datetime(['', '']) self.assert_(isnull(result).all()) + # ints + result = Timestamp(0) + expected = to_datetime(0) + self.assert_(result == expected) + + # GH 3888 (strings) + expected = to_datetime(['2012'])[0] + result = to_datetime('2012') + self.assert_(result == expected) + + ### array = ['2012','20120101','20120101 12:01:01'] + array = ['20120101','20120101 12:01:01'] + expected = list(to_datetime(array)) + result = map(Timestamp,array) + tm.assert_almost_equal(result,expected) + + ### currently fails ### + ### result = Timestamp('2012') + ### expected = to_datetime('2012') + ### self.assert_(result == expected) + def test_to_datetime_other_datetime64_units(self): # 5/25/2012 scalar = np.int64(1337904000000000).view('M8[us]') diff --git a/pandas/tseries/tools.py b/pandas/tseries/tools.py index 90bc0beb8eb84..c80d2ef5d4e1c 100644 --- a/pandas/tseries/tools.py +++ b/pandas/tseries/tools.py @@ -99,16 +99,7 @@ def _convert_f(arg): except (ValueError, TypeError): raise e - if arg is None: - return arg - elif isinstance(arg, datetime): - return arg - elif isinstance(arg, Series): - values = arg.values - if not com.is_datetime64_dtype(values): - values = _convert_f(values) - return Series(values, index=arg.index, name=arg.name) - elif isinstance(arg, (np.ndarray, list)): + def _convert_listlike(arg): if isinstance(arg, list): arg = np.array(arg, dtype='O') @@ -122,24 +113,23 @@ def _convert_f(arg): return DatetimeIndex._simple_new(values, None, tz=tz) except (ValueError, TypeError): raise e - return arg + return arg - try: - return _convert_f(arg) - except ValueError: - raise - return arg + return _convert_f(arg) - try: - if not arg: - return arg - default = datetime(1, 1, 1) - return parse(arg, dayfirst=dayfirst, default=default) - except Exception: - if errors == 'raise': - raise + if arg is None: return arg + elif isinstance(arg, datetime): + return arg + elif isinstance(arg, Series): + values = arg.values + if not com.is_datetime64_dtype(values): + values = _convert_f(values) + return Series(values, index=arg.index, name=arg.name) + elif isinstance(arg, (np.ndarray, list)): + return _convert_listlike(arg) + return _convert_listlike(np.array([ arg ], dtype='O'))[0] class DateParseError(ValueError): pass