Skip to content

Commit 4c860de

Browse files
author
Chang She
committed
ENH: handle datetime.date in Period constructor
1 parent 462c731 commit 4c860de

File tree

2 files changed

+14
-3
lines changed

2 files changed

+14
-3
lines changed

pandas/tseries/period.py

+5-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
# pylint: disable=E1101,E1103,W0232
2-
3-
from datetime import datetime
2+
from datetime import datetime, date
43
import numpy as np
54

65
from pandas.tseries.frequencies import (get_freq_code as _gfc, to_offset,
@@ -104,6 +103,10 @@ def __init__(self, value=None, freq=None, ordinal=None,
104103
dt = value
105104
if freq is None:
106105
raise ValueError('Must supply freq for datetime value')
106+
elif isinstance(value, date):
107+
dt = datetime(year=value.year, month=value.month, day=value.day)
108+
if freq is None:
109+
raise ValueError('Must supply freq for datetime value')
107110
else:
108111
msg = "Value must be Period, string, integer, or datetime"
109112
raise ValueError(msg)

pandas/tseries/tests/test_period.py

+9-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
"""
88

99
from unittest import TestCase
10-
from datetime import datetime, timedelta
10+
from datetime import datetime, date, timedelta
1111
import unittest
1212

1313
from numpy.ma.testutils import assert_equal
@@ -168,6 +168,14 @@ def test_period_constructor(self):
168168
i1 = Period(ordinal=200701, freq='M')
169169
self.assertEqual(i1.year, 18695)
170170

171+
i1 = Period(datetime(2007, 1, 1), freq='M')
172+
i2 = Period('200701', freq='M')
173+
self.assertEqual(i1, i2)
174+
175+
i1 = Period(date(2007, 1, 1), freq='M')
176+
i2 = Period(datetime(2007, 1, 1), freq='M')
177+
self.assertEqual(i1, i2)
178+
171179
self.assertRaises(ValueError, Period, ordinal=200701)
172180

173181
def test_freq_str(self):

0 commit comments

Comments
 (0)