Skip to content

Commit 015447a

Browse files
committed
ENH: adapt stdlib _strptime module to Cython for 2.5x speedup
1 parent 38ff9d5 commit 015447a

File tree

3 files changed

+692
-4
lines changed

3 files changed

+692
-4
lines changed

pandas/tseries/tests/test_timeseries.py

+13-1
Original file line numberDiff line numberDiff line change
@@ -675,6 +675,18 @@ def test_to_datetime_default(self):
675675
xp = datetime(2001, 1, 1)
676676
self.assert_(rs, xp)
677677

678+
def test_to_datetime_format(self):
679+
values = ['1/1/2000', '1/2/2000', '1/3/2000']
680+
681+
def _parse_format(fmt, values):
682+
return to_datetime([datetime.strptime(x, fmt)
683+
for x in values])
684+
685+
for fmt in ['%d/%m/%Y', '%m/%d/%Y']:
686+
result = to_datetime(values, format=fmt)
687+
expected = _parse_format(fmt, values)
688+
self.assert_(result.equals(expected))
689+
678690
def test_to_datetime_on_datetime64_series(self):
679691
# #2699
680692
s = Series(date_range('1/1/2000', periods=10))
@@ -2445,7 +2457,7 @@ def test_intercept_astype_object(self):
24452457
# Work around NumPy 1.6 bugs
24462458
#result = self.series.astype(object)
24472459
#result2 = self.series.astype('O')
2448-
2460+
24492461
expected = Series(self.series, dtype=object)
24502462

24512463
#assert_series_equal(result, expected)

pandas/tseries/tools.py

+7-3
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,8 @@ def _maybe_get_tz(tz):
4848
return tz
4949

5050

51-
def to_datetime(arg, errors='ignore', dayfirst=False, utc=None, box=True):
51+
def to_datetime(arg, errors='ignore', dayfirst=False, utc=None, box=True,
52+
format=None):
5253
"""
5354
Convert argument to datetime
5455
@@ -72,8 +73,11 @@ def _convert_f(arg):
7273
arg = com._ensure_object(arg)
7374

7475
try:
75-
result = tslib.array_to_datetime(arg, raise_=errors == 'raise',
76-
utc=utc, dayfirst=dayfirst)
76+
if format is not None:
77+
result = tslib.array_strptime(arg, format)
78+
else:
79+
result = tslib.array_to_datetime(arg, raise_=errors == 'raise',
80+
utc=utc, dayfirst=dayfirst)
7781
if com.is_datetime64_dtype(result) and box:
7882
result = DatetimeIndex(result, tz='utc' if utc else None)
7983
return result

0 commit comments

Comments
 (0)