@@ -1187,6 +1187,7 @@ cdef class Seen:
1187
1187
bint timedelta_ # seen_timedelta
1188
1188
bint datetimetz_ # seen_datetimetz
1189
1189
bint period_ # seen_period
1190
+ bint interval_ # seen_interval
1190
1191
1191
1192
def __cinit__(self , bint coerce_numeric = False ):
1192
1193
"""
@@ -1212,6 +1213,7 @@ cdef class Seen:
1212
1213
self .timedelta_ = False
1213
1214
self .datetimetz_ = False
1214
1215
self .period_ = False
1216
+ self .interval_ = False
1215
1217
self .coerce_numeric = coerce_numeric
1216
1218
1217
1219
cdef inline bint check_uint64_conflict(self ) except - 1 :
@@ -2035,7 +2037,6 @@ cpdef bint is_interval_array(ndarray values):
2035
2037
"""
2036
2038
Is this an ndarray of Interval (or np.nan) with a single dtype?
2037
2039
"""
2038
-
2039
2040
cdef:
2040
2041
Py_ssize_t i, n = len (values)
2041
2042
str closed = None
@@ -2320,6 +2321,7 @@ def maybe_convert_objects(ndarray[object] objects,
2320
2321
bint convert_datetime = False ,
2321
2322
bint convert_timedelta = False ,
2322
2323
bint convert_period = False ,
2324
+ bint convert_interval = False ,
2323
2325
bint convert_to_nullable_integer = False ) -> "ArrayLike":
2324
2326
"""
2325
2327
Type inference function-- convert object array to proper dtype
@@ -2343,6 +2345,9 @@ def maybe_convert_objects(ndarray[object] objects,
2343
2345
convert_period : bool , default False
2344
2346
If an array-like object contains only (homogeneous-freq ) Period values
2345
2347
or NaT , whether to convert and return a PeriodArray.
2348
+ convert_interval : bool , default False
2349
+ If an array-like object contains only Interval objects (with matching
2350
+ dtypes and closedness ) or NaN , whether to convert to IntervalArray.
2346
2351
convert_to_nullable_integer : bool , default False
2347
2352
If an array-like object contains only integer values (and NaN ) is
2348
2353
encountered , whether to convert and return an IntegerArray.
@@ -2473,6 +2478,13 @@ def maybe_convert_objects(ndarray[object] objects,
2473
2478
except (ValueError , TypeError ):
2474
2479
seen.object_ = True
2475
2480
break
2481
+ elif is_interval(val):
2482
+ if convert_interval:
2483
+ seen.interval_ = True
2484
+ break
2485
+ else :
2486
+ seen.object_ = True
2487
+ break
2476
2488
else :
2477
2489
seen.object_ = True
2478
2490
break
@@ -2494,6 +2506,17 @@ def maybe_convert_objects(ndarray[object] objects,
2494
2506
2495
2507
# unbox to PeriodArray
2496
2508
return pi._data
2509
+ seen.object_ = True
2510
+
2511
+ if seen.interval_:
2512
+ if is_interval_array(objects):
2513
+ from pandas import IntervalIndex
2514
+ ii = IntervalIndex(objects)
2515
+
2516
+ # unbox to IntervalArray
2517
+ return ii._data
2518
+
2519
+ seen.object_ = True
2497
2520
2498
2521
if not seen.object_:
2499
2522
result = None
0 commit comments