1
1
cimport util
2
2
from tslib import NaT
3
-
3
+ from datetime import datetime, timedelta
4
4
iNaT = util.get_nat()
5
5
6
6
_TYPE_MAP = {
@@ -141,6 +141,9 @@ cdef inline bint is_date(object o):
141
141
cdef inline bint is_time(object o):
142
142
return PyTime_Check(o)
143
143
144
+ cdef inline bint is_timedelta(object o):
145
+ return PyDelta_Check(o) or util.is_timedelta64_object(o)
146
+
144
147
def is_bool_array (ndarray values ):
145
148
cdef:
146
149
Py_ssize_t i, n = len (values)
@@ -296,19 +299,14 @@ def is_datetime64_array(ndarray values):
296
299
return False
297
300
return True
298
301
299
- def is_timedelta (object o ):
300
- import datetime
301
- return isinstance (o,datetime.timedelta) or isinstance (o,np.timedelta64)
302
-
303
302
def is_timedelta_array (ndarray values ):
304
- import datetime
305
303
cdef int i, n = len (values)
306
304
cdef object v
307
305
if n == 0 :
308
306
return False
309
307
for i in range (n):
310
308
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)):
312
310
return False
313
311
return True
314
312
@@ -319,21 +317,19 @@ def is_timedelta64_array(ndarray values):
319
317
return False
320
318
for i in range (n):
321
319
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)):
323
321
return False
324
322
return True
325
323
326
324
def is_timedelta_or_timedelta64_array (ndarray values ):
327
325
""" infer with timedeltas and/or nat/none """
328
- import datetime
329
326
cdef int i, n = len (values)
330
327
cdef object v
331
328
if n == 0 :
332
329
return False
333
330
for i in range (n):
334
331
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)):
337
333
return False
338
334
return True
339
335
@@ -486,10 +482,14 @@ def maybe_convert_objects(ndarray[object] objects, bint try_float=0,
486
482
complexes = np.empty(n, dtype = ' c16' )
487
483
ints = np.empty(n, dtype = ' i8' )
488
484
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)
493
493
494
494
onan = np.nan
495
495
fnan = np.nan
@@ -625,8 +625,6 @@ def try_parse_dates(ndarray[object] values, parser=None,
625
625
Py_ssize_t i, n
626
626
ndarray[object ] result
627
627
628
- from datetime import datetime, timedelta
629
-
630
628
n = len (values)
631
629
result = np.empty(n, dtype = ' O' )
632
630
@@ -884,8 +882,10 @@ def map_infer_mask(ndarray arr, object f, ndarray[uint8_t] mask,
884
882
result[i] = val
885
883
886
884
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 )
889
889
890
890
return result
891
891
@@ -920,8 +920,10 @@ def map_infer(ndarray arr, object f, bint convert=1):
920
920
result[i] = val
921
921
922
922
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 )
925
927
926
928
return result
927
929
0 commit comments