Skip to content

Commit cfb73f5

Browse files
add string-specific ObjectEngine subclass for pre-processing of input values
1 parent 091baa8 commit cfb73f5

File tree

3 files changed

+13
-0
lines changed

3 files changed

+13
-0
lines changed

pandas/_libs/index.pyi

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ class UInt16Engine(IndexEngine): ...
5454
class UInt8Engine(IndexEngine): ...
5555
class ObjectEngine(IndexEngine): ...
5656
class StringEngine(IndexEngine): ...
57+
class StringObjectEngine(ObjectEngine): ...
5758
class DatetimeEngine(Int64Engine): ...
5859
class TimedeltaEngine(DatetimeEngine): ...
5960
class PeriodEngine(Int64Engine): ...

pandas/_libs/index.pyx

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -557,6 +557,16 @@ cdef class StringEngine(IndexEngine):
557557
raise KeyError(val)
558558
return str(val)
559559

560+
cdef class StringObjectEngine(ObjectEngine):
561+
562+
cdef _check_type(self, object val):
563+
if isinstance(val, str):
564+
return val
565+
elif checknull(val):
566+
return np.nan
567+
else:
568+
raise KeyError(val)
569+
560570

561571
cdef class DatetimeEngine(Int64Engine):
562572

pandas/core/indexes/base.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -876,6 +876,8 @@ def _engine(
876876
# ndarray[Any, Any]]" has no attribute "_ndarray" [union-attr]
877877
target_values = self._data._ndarray # type: ignore[union-attr]
878878
# TODO re-enable StringEngine for string dtype
879+
elif is_string_dtype(self.dtype) and not is_object_dtype(self.dtype):
880+
return libindex.StringObjectEngine(target_values)
879881

880882
# error: Argument 1 to "ExtensionEngine" has incompatible type
881883
# "ndarray[Any, Any]"; expected "ExtensionArray"

0 commit comments

Comments
 (0)