Skip to content

Commit 819fad4

Browse files
committed
BUG: Timestamp properties may return np.int
1 parent 3c0e66d commit 819fad4

File tree

3 files changed

+56
-2
lines changed

3 files changed

+56
-2
lines changed

doc/source/whatsnew/v0.17.0.txt

+3
Original file line numberDiff line numberDiff line change
@@ -57,3 +57,6 @@ Performance Improvements
5757

5858
Bug Fixes
5959
~~~~~~~~~
60+
61+
- Bug in ``Timestamp``'s' ``microsecond``, ``quarter``, ``dayofyear``, ``week`` and ``daysinmonth`` properties return ``np.int`` type, not built-in ``int``. (:issue:`10050`)
62+
- Bug in ``NaT`` raises ``AttributeError`` when accessing to ``daysinmonth``, ``dayofweek`` properties. (:issue:`xxx`)

pandas/tseries/tests/test_tslib.py

+51
Original file line numberDiff line numberDiff line change
@@ -369,6 +369,57 @@ def test_today(self):
369369
self.assertTrue(abs(ts_from_string_tz.tz_localize(None)
370370
- ts_from_method_tz.tz_localize(None)) < delta)
371371

372+
def test_timestamp_property(self):
373+
# GH 10050
374+
ts = Timestamp('2015-05-10 09:06:03.000100001')
375+
self.assertEqual(ts.year, 2015)
376+
self.assertTrue(isinstance(ts.year, int))
377+
self.assertEqual(ts.month, 5)
378+
self.assertTrue(isinstance(ts.month, int))
379+
self.assertEqual(ts.day, 10)
380+
self.assertTrue(isinstance(ts.day, int))
381+
self.assertEqual(ts.hour, 9)
382+
self.assertTrue(isinstance(ts.hour, int))
383+
self.assertEqual(ts.minute, 6)
384+
self.assertTrue(isinstance(ts.minute, int))
385+
self.assertEqual(ts.second, 3)
386+
self.assertTrue(isinstance(ts.second, int))
387+
self.assertEqual(ts.microsecond, 100)
388+
self.assertTrue(isinstance(ts.microsecond, int))
389+
self.assertEqual(ts.nanosecond, 1)
390+
self.assertTrue(isinstance(ts.nanosecond, int))
391+
self.assertEqual(ts.dayofweek, 6)
392+
self.assertTrue(isinstance(ts.dayofweek, int))
393+
self.assertEqual(ts.quarter, 2)
394+
self.assertTrue(isinstance(ts.quarter, int))
395+
self.assertEqual(ts.dayofyear, 130)
396+
self.assertTrue(isinstance(ts.dayofyear, int))
397+
self.assertEqual(ts.week, 19)
398+
self.assertTrue(isinstance(ts.week, int))
399+
self.assertEqual(ts.daysinmonth, 31)
400+
self.assertTrue(isinstance(ts.days_in_month, int))
401+
self.assertEqual(ts.daysinmonth, 31)
402+
self.assertTrue(isinstance(ts.daysinmonth, int))
403+
404+
def test_nat_property(self):
405+
# GH 10050
406+
ts = Timestamp('NaT')
407+
self.assertTrue(np.isnan(ts.year))
408+
self.assertTrue(np.isnan(ts.month))
409+
self.assertTrue(np.isnan(ts.day))
410+
self.assertTrue(np.isnan(ts.hour))
411+
self.assertTrue(np.isnan(ts.minute))
412+
self.assertTrue(np.isnan(ts.second))
413+
self.assertTrue(np.isnan(ts.microsecond))
414+
self.assertTrue(np.isnan(ts.nanosecond))
415+
self.assertTrue(np.isnan(ts.dayofweek))
416+
self.assertTrue(np.isnan(ts.quarter))
417+
self.assertTrue(np.isnan(ts.dayofyear))
418+
self.assertTrue(np.isnan(ts.week))
419+
self.assertTrue(np.isnan(ts.daysinmonth))
420+
self.assertTrue(np.isnan(ts.days_in_month))
421+
422+
372423
class TestDatetimeParsingWrappers(tm.TestCase):
373424
def test_does_not_convert_mixed_integer(self):
374425
bad_date_strings = (

pandas/tslib.pyx

+2-2
Original file line numberDiff line numberDiff line change
@@ -627,7 +627,7 @@ class NaTType(_NaT):
627627

628628
fields = ['year', 'quarter', 'month', 'day', 'hour',
629629
'minute', 'second', 'millisecond', 'microsecond', 'nanosecond',
630-
'week', 'dayofyear', 'days_in_month']
630+
'week', 'dayofyear', 'days_in_month', 'daysinmonth', 'dayofweek']
631631
for field in fields:
632632
prop = property(fget=lambda self: np.nan)
633633
setattr(NaTType, field, prop)
@@ -952,7 +952,7 @@ cdef class _Timestamp(datetime):
952952

953953
cpdef _get_field(self, field):
954954
out = get_date_field(np.array([self.value], dtype=np.int64), field)
955-
return out[0]
955+
return int(out[0])
956956

957957
cpdef _get_start_end_field(self, field):
958958
month_kw = self.freq.kwds.get('startingMonth', self.freq.kwds.get('month', 12)) if self.freq else 12

0 commit comments

Comments
 (0)