Skip to content

Commit 42bb915

Browse files
committed
Merge pull request pandas-dev#9896 from cpcloud/jcrist-period_dtime64
Period accepts datetime64
2 parents 3703f74 + 920396d commit 42bb915

File tree

3 files changed

+19
-1
lines changed

3 files changed

+19
-1
lines changed

doc/source/whatsnew/v0.16.1.txt

+1
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ Enhancements
4949

5050
- Allow conversion of values with dtype ``datetime64`` or ``timedelta64`` to strings using ``astype(str)`` (:issue:`9757`)
5151
- ``get_dummies`` function now accepts ``sparse`` keyword. If set to ``True``, the return ``DataFrame`` is sparse, e.g. ``SparseDataFrame``. (:issue:`8823`)
52+
- ``Period`` now accepts ``datetime64`` as value input. (:issue:`9054`)
5253

5354
- Allow timedelta string conversion when leading zero is missing from time definition, ie `0:00:00` vs `00:00:00`. (:issue:`9570`)
5455

pandas/src/period.pyx

+4
Original file line numberDiff line numberDiff line change
@@ -710,6 +710,10 @@ cdef class Period(object):
710710
dt = value
711711
if freq is None:
712712
raise ValueError('Must supply freq for datetime value')
713+
elif isinstance(value, np.datetime64):
714+
dt = Timestamp(value)
715+
if freq is None:
716+
raise ValueError('Must supply freq for datetime value')
713717
elif isinstance(value, date):
714718
dt = datetime(year=value.year, month=value.month, day=value.day)
715719
if freq is None:

pandas/tseries/tests/test_period.py

+14-1
Original file line numberDiff line numberDiff line change
@@ -226,16 +226,29 @@ def test_period_constructor(self):
226226

227227
i1 = Period(date(2007, 1, 1), freq='M')
228228
i2 = Period(datetime(2007, 1, 1), freq='M')
229+
i3 = Period(np.datetime64('2007-01-01'), freq='M')
230+
i4 = Period(np.datetime64('2007-01-01 00:00:00Z'), freq='M')
231+
i5 = Period(np.datetime64('2007-01-01 00:00:00.000Z'), freq='M')
229232
self.assertEqual(i1, i2)
233+
self.assertEqual(i1, i3)
234+
self.assertEqual(i1, i4)
235+
self.assertEqual(i1, i5)
230236

231237
i1 = Period('2007-01-01 09:00:00.001')
232238
expected = Period(datetime(2007, 1, 1, 9, 0, 0, 1000), freq='L')
233239
self.assertEqual(i1, expected)
234240

241+
expected = Period(np.datetime64('2007-01-01 09:00:00.001Z'), freq='L')
242+
self.assertEqual(i1, expected)
243+
235244
i1 = Period('2007-01-01 09:00:00.00101')
236245
expected = Period(datetime(2007, 1, 1, 9, 0, 0, 1010), freq='U')
237246
self.assertEqual(i1, expected)
238247

248+
expected = Period(np.datetime64('2007-01-01 09:00:00.00101Z'),
249+
freq='U')
250+
self.assertEqual(i1, expected)
251+
239252
self.assertRaises(ValueError, Period, ordinal=200701)
240253

241254
self.assertRaises(ValueError, Period, '2007-1-1', freq='X')
@@ -434,7 +447,7 @@ def test_properties_weekly(self):
434447
assert_equal((w_date - 1).week, 52)
435448
assert_equal(w_date.days_in_month, 31)
436449
assert_equal(Period(freq='WK', year=2012, month=2, day=1).days_in_month, 29)
437-
450+
438451
def test_properties_daily(self):
439452
# Test properties on Periods with daily frequency.
440453
b_date = Period(freq='B', year=2007, month=1, day=1)

0 commit comments

Comments
 (0)