Skip to content

Commit 57e9bb9

Browse files
committed
DEPR: Deprecate Timestamp.to_datetime
1 parent a0151a7 commit 57e9bb9

File tree

8 files changed

+42
-27
lines changed

8 files changed

+42
-27
lines changed

doc/source/whatsnew/v0.19.0.txt

+1
Original file line numberDiff line numberDiff line change
@@ -1031,6 +1031,7 @@ Deprecations
10311031
- ``Categorical.reshape`` has been deprecated and will be removed in a subsequent release (:issue:`12882`)
10321032
- ``Series.reshape`` has been deprecated and will be removed in a subsequent release (:issue:`12882`)
10331033

1034+
- ``Timestamp.to_datetime`` has been deprecated in favour of ``Timestamp.to_pydatetime`` (:issue:`8254`)
10341035
- ``Index.to_datetime`` and ``DatetimeIndex.to_datetime`` have been deprecated in favour of ``pd.to_datetime`` (:issue:`8254`)
10351036
- ``SparseList`` has been deprecated and will be removed in a future version (:issue:`13784`)
10361037
- ``DataFrame.to_html()`` and ``DataFrame.to_latex()`` have dropped the ``colSpace`` parameter in favor of ``col_space`` (:issue:`13857`)

pandas/io/tests/json/test_pandas.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -908,17 +908,17 @@ def test_tz_is_utc(self):
908908

909909
ts = Timestamp('2013-01-10 05:00:00Z')
910910
self.assertEqual(exp, pd.json.dumps(ts, iso_dates=True))
911-
dt = ts.to_datetime()
911+
dt = ts.to_pydatetime()
912912
self.assertEqual(exp, pd.json.dumps(dt, iso_dates=True))
913913

914914
ts = Timestamp('2013-01-10 00:00:00', tz='US/Eastern')
915915
self.assertEqual(exp, pd.json.dumps(ts, iso_dates=True))
916-
dt = ts.to_datetime()
916+
dt = ts.to_pydatetime()
917917
self.assertEqual(exp, pd.json.dumps(dt, iso_dates=True))
918918

919919
ts = Timestamp('2013-01-10 00:00:00-0500')
920920
self.assertEqual(exp, pd.json.dumps(ts, iso_dates=True))
921-
dt = ts.to_datetime()
921+
dt = ts.to_pydatetime()
922922
self.assertEqual(exp, pd.json.dumps(dt, iso_dates=True))
923923

924924
def test_tz_range_is_utc(self):

pandas/tests/indexes/test_base.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -502,7 +502,7 @@ def test_asof(self):
502502
d = self.dateIndex[-1]
503503
self.assertEqual(self.dateIndex.asof(d + timedelta(1)), d)
504504

505-
d = self.dateIndex[0].to_datetime()
505+
d = self.dateIndex[0].to_pydatetime()
506506
tm.assertIsInstance(self.dateIndex.asof(d), Timestamp)
507507

508508
def test_asof_datetime_partial(self):

pandas/tests/test_groupby.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -779,7 +779,7 @@ def test_get_group(self):
779779
g = df.groupby('DATE')
780780
key = list(g.groups)[0]
781781
result1 = g.get_group(key)
782-
result2 = g.get_group(Timestamp(key).to_datetime())
782+
result2 = g.get_group(Timestamp(key).to_pydatetime())
783783
result3 = g.get_group(str(Timestamp(key)))
784784
assert_frame_equal(result1, result2)
785785
assert_frame_equal(result1, result3)
@@ -788,7 +788,7 @@ def test_get_group(self):
788788

789789
key = list(g.groups)[0]
790790
result1 = g.get_group(key)
791-
result2 = g.get_group((Timestamp(key[0]).to_datetime(), key[1]))
791+
result2 = g.get_group((Timestamp(key[0]).to_pydatetime(), key[1]))
792792
result3 = g.get_group((str(Timestamp(key[0])), key[1]))
793793
assert_frame_equal(result1, result2)
794794
assert_frame_equal(result1, result3)

pandas/tseries/tests/test_base.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -1127,11 +1127,11 @@ def test_subtraction_ops_with_tz(self):
11271127
# check that dt/dti subtraction ops with tz are validated
11281128
dti = date_range('20130101', periods=3)
11291129
ts = Timestamp('20130101')
1130-
dt = ts.to_datetime()
1130+
dt = ts.to_pydatetime()
11311131
dti_tz = date_range('20130101', periods=3).tz_localize('US/Eastern')
11321132
ts_tz = Timestamp('20130101').tz_localize('US/Eastern')
11331133
ts_tz2 = Timestamp('20130101').tz_localize('CET')
1134-
dt_tz = ts_tz.to_datetime()
1134+
dt_tz = ts_tz.to_pydatetime()
11351135
td = Timedelta('1 days')
11361136

11371137
def _check(result, expected):

pandas/tseries/tests/test_timezones.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ def test_timestamp_to_datetime_tzoffset(self):
169169
from dateutil.tz import tzoffset
170170
tzinfo = tzoffset(None, 7200)
171171
expected = Timestamp('3/11/2012 04:00', tz=tzinfo)
172-
result = Timestamp(expected.to_datetime())
172+
result = Timestamp(expected.to_pydatetime())
173173
self.assertEqual(expected, result)
174174

175175
def test_timedelta_push_over_dst_boundary(self):

pandas/tseries/tests/test_tslib.py

+10
Original file line numberDiff line numberDiff line change
@@ -616,6 +616,16 @@ def test_pprint(self):
616616
'foo': 1}"""
617617
self.assertEqual(result, expected)
618618

619+
def to_datetime_depr(self):
620+
# see gh-8254
621+
ts = Timestamp('2011-01-01')
622+
623+
with tm.assert_produces_warning(FutureWarning,
624+
check_stacklevel=False):
625+
expected = datetime.datetime(2011, 1, 1)
626+
result = ts.to_datetime()
627+
self.assertEqual(result, expected)
628+
619629

620630
class TestDatetimeParsingWrappers(tm.TestCase):
621631
def test_does_not_convert_mixed_integer(self):

pandas/tslib.pyx

+22-18
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# cython: profile=False
22

3+
import warnings
4+
35
cimport numpy as np
46
from numpy cimport (int8_t, int32_t, int64_t, import_array, ndarray,
57
NPY_INT64, NPY_DATETIME, NPY_TIMEDELTA)
@@ -637,22 +639,6 @@ class Timestamp(_Timestamp):
637639
return Timestamp(datetime.replace(self, **kwds),
638640
freq=self.freq)
639641

640-
def to_pydatetime(self, warn=True):
641-
"""
642-
If warn=True, issue warning if nanoseconds is nonzero
643-
"""
644-
cdef:
645-
pandas_datetimestruct dts
646-
_TSObject ts
647-
648-
if self.nanosecond != 0 and warn:
649-
print 'Warning: discarding nonzero nanoseconds'
650-
ts = convert_to_tsobject(self, self.tzinfo, None, 0, 0)
651-
652-
return datetime(ts.dts.year, ts.dts.month, ts.dts.day,
653-
ts.dts.hour, ts.dts.min, ts.dts.sec,
654-
ts.dts.us, ts.tzinfo)
655-
656642
def isoformat(self, sep='T'):
657643
base = super(_Timestamp, self).isoformat(sep=sep)
658644
if self.nanosecond == 0:
@@ -986,7 +972,7 @@ cdef class _Timestamp(datetime):
986972
ots = other
987973
elif isinstance(other, datetime):
988974
if self.nanosecond == 0:
989-
val = self.to_datetime()
975+
val = self.to_pydatetime()
990976
return PyObject_RichCompareBool(val, other, op)
991977

992978
try:
@@ -1048,7 +1034,7 @@ cdef class _Timestamp(datetime):
10481034

10491035
cdef bint _compare_outside_nanorange(_Timestamp self, datetime other,
10501036
int op) except -1:
1051-
cdef datetime dtval = self.to_datetime()
1037+
cdef datetime dtval = self.to_pydatetime(warn=False)
10521038

10531039
self._assert_tzawareness_compat(other)
10541040

@@ -1078,9 +1064,27 @@ cdef class _Timestamp(datetime):
10781064
raise TypeError('Cannot compare tz-naive and tz-aware timestamps')
10791065

10801066
cpdef datetime to_datetime(_Timestamp self):
1067+
"""
1068+
DEPRECATED: use :meth:`to_pydatetime` instead.
1069+
1070+
Convert a Timestamp object to a native Python datetime object.
1071+
"""
1072+
warnings.warn("to_datetime is deprecated. Use self.to_pydatetime()",
1073+
FutureWarning, stacklevel=2)
1074+
return self.to_pydatetime(warn=False)
1075+
1076+
cpdef datetime to_pydatetime(_Timestamp self, warn=True):
1077+
"""
1078+
Convert a Timestamp object to a native Python datetime object.
1079+
1080+
If warn=True, issue a warning if nanoseconds is nonzero.
1081+
"""
10811082
cdef:
10821083
pandas_datetimestruct dts
10831084
_TSObject ts
1085+
1086+
if self.nanosecond != 0 and warn:
1087+
print 'Warning: discarding nonzero nanoseconds'
10841088
ts = convert_to_tsobject(self, self.tzinfo, None, 0, 0)
10851089
dts = ts.dts
10861090
return datetime(dts.year, dts.month, dts.day,

0 commit comments

Comments
 (0)