@@ -1005,7 +1005,7 @@ def array_to_datetime(ndarray[object] values, raise_=False, dayfirst=False,
1005
1005
ndarray[int64_t] iresult
1006
1006
ndarray[object ] oresult
1007
1007
pandas_datetimestruct dts
1008
- bint utc_convert = bool (utc)
1008
+ bint utc_convert = bool (utc), seen_integer = 0 , seen_datetime = 0
1009
1009
_TSObject _ts
1010
1010
int64_t m = cast_from_unit(None ,unit)
1011
1011
@@ -1017,6 +1017,7 @@ def array_to_datetime(ndarray[object] values, raise_=False, dayfirst=False,
1017
1017
if _checknull_with_nat(val):
1018
1018
iresult[i] = iNaT
1019
1019
elif PyDateTime_Check(val):
1020
+ seen_datetime= 1
1020
1021
if val.tzinfo is not None :
1021
1022
if utc_convert:
1022
1023
_ts = convert_to_tsobject(val, None , unit)
@@ -1047,6 +1048,7 @@ def array_to_datetime(ndarray[object] values, raise_=False, dayfirst=False,
1047
1048
iresult[i] = _date_to_datetime64(val, & dts)
1048
1049
try :
1049
1050
_check_dts_bounds(& dts)
1051
+ seen_datetime= 1
1050
1052
except ValueError :
1051
1053
if coerce :
1052
1054
iresult[i] = iNaT
@@ -1058,6 +1060,7 @@ def array_to_datetime(ndarray[object] values, raise_=False, dayfirst=False,
1058
1060
else :
1059
1061
try :
1060
1062
iresult[i] = _get_datetime64_nanos(val)
1063
+ seen_datetime= 1
1061
1064
except ValueError :
1062
1065
if coerce :
1063
1066
iresult[i] = iNaT
@@ -1070,11 +1073,13 @@ def array_to_datetime(ndarray[object] values, raise_=False, dayfirst=False,
1070
1073
iresult[i] = iNaT
1071
1074
else :
1072
1075
iresult[i] = val* m
1076
+ seen_integer= 1
1073
1077
elif util.is_float_object(val) and not coerce :
1074
1078
if val != val or val == iNaT:
1075
1079
iresult[i] = iNaT
1076
1080
else :
1077
1081
iresult[i] = cast_from_unit(val,unit)
1082
+ seen_integer= 1
1078
1083
else :
1079
1084
try :
1080
1085
if len (val) == 0 :
@@ -1114,6 +1119,12 @@ def array_to_datetime(ndarray[object] values, raise_=False, dayfirst=False,
1114
1119
continue
1115
1120
raise
1116
1121
1122
+ # don't allow mixed integers and datetime like
1123
+ # higher levels can catch and coerce to object, for
1124
+ # example
1125
+ if seen_integer and seen_datetime:
1126
+ raise ValueError (" mixed datetimes and integers in passed array" )
1127
+
1117
1128
return result
1118
1129
except OutOfBoundsDatetime:
1119
1130
if raise_:
0 commit comments