@@ -966,37 +966,30 @@ def insert(self, loc, item):
966
966
-------
967
967
new_index : Index
968
968
"""
969
+ if isinstance (item , str ):
970
+ # TODO: Why are strings special?
971
+ # TODO: Should we attempt _scalar_from_string?
972
+ return self .astype (object ).insert (loc , item )
973
+
969
974
item = self ._data ._validate_insert_value (item )
970
975
971
976
freq = None
972
- if isinstance (item , self ._data ._scalar_type ) or item is NaT :
973
- self ._data ._check_compatible_with (item , setitem = True )
974
-
975
- # check freq can be preserved on edge cases
976
- if self .size and self .freq is not None :
977
+ # check freq can be preserved on edge cases
978
+ if self .freq is not None :
979
+ if self .size :
977
980
if item is NaT :
978
981
pass
979
982
elif (loc == 0 or loc == - len (self )) and item + self .freq == self [0 ]:
980
983
freq = self .freq
981
984
elif (loc == len (self )) and item - self .freq == self [- 1 ]:
982
985
freq = self .freq
983
- elif self . freq is not None :
986
+ else :
984
987
# Adding a single item to an empty index may preserve freq
985
988
if self .freq .is_on_offset (item ):
986
989
freq = self .freq
987
- item = item .asm8
988
990
989
- try :
990
- new_i8s = np .concatenate (
991
- (self [:loc ].asi8 , [item .view (np .int64 )], self [loc :].asi8 )
992
- )
993
- arr = type (self ._data )._simple_new (new_i8s , dtype = self .dtype , freq = freq )
994
- return type (self )._simple_new (arr , name = self .name )
995
- except (AttributeError , TypeError ) as err :
991
+ item = self ._data ._unbox_scalar (item )
996
992
997
- # fall back to object index
998
- if isinstance (item , str ):
999
- return self .astype (object ).insert (loc , item )
1000
- raise TypeError (
1001
- f"cannot insert { type (self ).__name__ } with incompatible label"
1002
- ) from err
993
+ new_i8s = np .concatenate ([self [:loc ].asi8 , [item ], self [loc :].asi8 ])
994
+ arr = type (self ._data )._simple_new (new_i8s , dtype = self .dtype , freq = freq )
995
+ return type (self )._simple_new (arr , name = self .name )
0 commit comments