@@ -44,6 +44,7 @@ from pandas._libs.tslibs.conversion cimport (
4444 cast_from_unit,
4545)
4646from pandas._libs.tslibs.dtypes cimport (
47+ abbrev_to_npy_unit,
4748 c_DEPR_UNITS,
4849 get_supported_reso,
4950 is_supported_unit,
@@ -359,11 +360,16 @@ def array_to_timedelta64(
359360 cnp.broadcast mi = cnp.PyArray_MultiIterNew2(result, values)
360361 cnp.flatiter it
361362 str parsed_unit = parse_timedelta_unit(unit or " ns" )
362- NPY_DATETIMEUNIT item_reso
363+ NPY_DATETIMEUNIT item_reso , int_reso
363364 ResoState state = ResoState(creso)
364365 bint infer_reso = creso == NPY_DATETIMEUNIT.NPY_FR_GENERIC
365366 ndarray iresult = result.view(" i8" )
366367
368+ if unit is None:
369+ int_reso = NPY_FR_ns
370+ else:
371+ int_reso = get_supported_reso(abbrev_to_npy_unit(parsed_unit))
372+
367373 if values.descr.type_num != cnp.NPY_OBJECT:
368374 # raise here otherwise we segfault below
369375 raise TypeError("array_to_timedelta64 'values' must have object dtype")
@@ -472,7 +478,18 @@ def array_to_timedelta64(
472478 creso = state.creso
473479 ival = delta_to_nanoseconds(item, reso = creso)
474480
475- elif is_integer_object(item) or is_float_object(item):
481+ elif is_integer_object(item):
482+ if item == NPY_NAT:
483+ ival = NPY_NAT
484+ else :
485+ ival = _numeric_to_td64ns(item, parsed_unit, int_reso)
486+ item_reso = int_reso
487+
488+ state.update_creso(item_reso)
489+ if infer_reso:
490+ creso = state.creso
491+
492+ elif is_float_object(item):
476493 ival = _numeric_to_td64ns(item, parsed_unit, NPY_FR_ns)
477494
478495 item_reso = NPY_FR_ns
0 commit comments