11cimport util
22from tslib import NaT
3-
3+ from datetime import datetime, timedelta
44iNaT = util.get_nat()
55
66_TYPE_MAP = {
@@ -141,6 +141,9 @@ cdef inline bint is_date(object o):
141141cdef inline bint is_time(object o):
142142 return PyTime_Check(o)
143143
144+ cdef inline bint is_timedelta(object o):
145+ return PyDelta_Check(o) or util.is_timedelta64_object(o)
146+
144147def is_bool_array (ndarray values ):
145148 cdef:
146149 Py_ssize_t i, n = len (values)
@@ -296,19 +299,14 @@ def is_datetime64_array(ndarray values):
296299 return False
297300 return True
298301
299- def is_timedelta (object o ):
300- import datetime
301- return isinstance (o,datetime.timedelta) or isinstance (o,np.timedelta64)
302-
303302def is_timedelta_array (ndarray values ):
304- import datetime
305303 cdef int i, n = len (values)
306304 cdef object v
307305 if n == 0 :
308306 return False
309307 for i in range (n):
310308 v = values[i]
311- if not (isinstance (v,datetime.timedelta ) or is_null_datetimelike(v)):
309+ if not (PyDelta_Check(v ) or is_null_datetimelike(v)):
312310 return False
313311 return True
314312
@@ -319,21 +317,19 @@ def is_timedelta64_array(ndarray values):
319317 return False
320318 for i in range (n):
321319 v = values[i]
322- if not (isinstance (v,np.timedelta64 ) or is_null_datetimelike(v)):
320+ if not (util.is_timedelta64_object(v ) or is_null_datetimelike(v)):
323321 return False
324322 return True
325323
326324def is_timedelta_or_timedelta64_array (ndarray values ):
327325 """ infer with timedeltas and/or nat/none """
328- import datetime
329326 cdef int i, n = len (values)
330327 cdef object v
331328 if n == 0 :
332329 return False
333330 for i in range (n):
334331 v = values[i]
335- if not (isinstance (v,datetime.timedelta) or isinstance (v,np.timedelta64) or
336- is_null_datetimelike(v)):
332+ if not (is_timedelta(v) or is_null_datetimelike(v)):
337333 return False
338334 return True
339335
@@ -486,10 +482,14 @@ def maybe_convert_objects(ndarray[object] objects, bint try_float=0,
486482 complexes = np.empty(n, dtype = ' c16' )
487483 ints = np.empty(n, dtype = ' i8' )
488484 bools = np.empty(n, dtype = np.uint8)
489- datetimes = np.empty(n, dtype = ' M8[ns]' )
490- idatetimes = datetimes.view(np.int64)
491- timedeltas = np.empty(n, dtype = ' m8[ns]' )
492- itimedeltas = timedeltas.view(np.int64)
485+
486+ if convert_datetime:
487+ datetimes = np.empty(n, dtype = ' M8[ns]' )
488+ idatetimes = datetimes.view(np.int64)
489+
490+ if convert_timedelta:
491+ timedeltas = np.empty(n, dtype = ' m8[ns]' )
492+ itimedeltas = timedeltas.view(np.int64)
493493
494494 onan = np.nan
495495 fnan = np.nan
@@ -625,8 +625,6 @@ def try_parse_dates(ndarray[object] values, parser=None,
625625 Py_ssize_t i, n
626626 ndarray[object ] result
627627
628- from datetime import datetime, timedelta
629-
630628 n = len (values)
631629 result = np.empty(n, dtype = ' O' )
632630
@@ -884,8 +882,10 @@ def map_infer_mask(ndarray arr, object f, ndarray[uint8_t] mask,
884882 result[i] = val
885883
886884 if convert:
887- return maybe_convert_objects(result, try_float = 0 ,
888- convert_datetime = 0 )
885+ return maybe_convert_objects(result,
886+ try_float = 0 ,
887+ convert_datetime = 0 ,
888+ convert_timedelta = 0 )
889889
890890 return result
891891
@@ -920,8 +920,10 @@ def map_infer(ndarray arr, object f, bint convert=1):
920920 result[i] = val
921921
922922 if convert:
923- return maybe_convert_objects(result, try_float = 0 ,
924- convert_datetime = 0 )
923+ return maybe_convert_objects(result,
924+ try_float = 0 ,
925+ convert_datetime = 0 ,
926+ convert_timedelta = 0 )
925927
926928 return result
927929
0 commit comments