BUG: setitem on string dtype with slices fails · Issue #31772 · pandas-dev/pandas (original) (raw)

In [33]: df = pd.DataFrame({'A': ['a', 'b', 'c']}, dtype='string')   

In [34]: df.loc[0:, 'A'] = "test"  
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-34-bc65087be9d7> in <module>
----> 1 df.loc[0:, 'A'] = "test"

~/scipy/pandas/pandas/core/indexing.py in __setitem__(self, key, value)
    629             key = com.apply_if_callable(key, self.obj)
    630         indexer = self._get_setitem_indexer(key)
--> 631         self._setitem_with_indexer(indexer, value)
    632 
    633     def _validate_key(self, key, axis: int):

~/scipy/pandas/pandas/core/indexing.py in _setitem_with_indexer(self, indexer, value)
   1014             # actually do the set
   1015             self.obj._consolidate_inplace()
-> 1016             self.obj._data = self.obj._data.setitem(indexer=indexer, value=value)
   1017             self.obj._maybe_update_cacher(clear=True)
   1018 

~/scipy/pandas/pandas/core/internals/managers.py in setitem(self, **kwargs)
    538 
    539     def setitem(self, **kwargs):
--> 540         return self.apply("setitem", **kwargs)
    541 
    542     def putmask(self, **kwargs):

~/scipy/pandas/pandas/core/internals/managers.py in apply(self, f, filter, **kwargs)
    417                 applied = b.apply(f, **kwargs)
    418             else:
--> 419                 applied = getattr(b, f)(**kwargs)
    420             result_blocks = _extend_blocks(applied, result_blocks)
    421 

~/scipy/pandas/pandas/core/internals/blocks.py in setitem(self, indexer, value)
   1801 
   1802         check_setitem_lengths(indexer, value, self.values)
-> 1803         self.values[indexer] = value
   1804         return self
   1805 

~/scipy/pandas/pandas/core/arrays/string_.py in __setitem__(self, key, value)
    260                 raise ValueError("Must provide strings.")
    261 
--> 262         super().__setitem__(key, value)
    263 
    264     def fillna(self, value=None, method=None, limit=None):

~/scipy/pandas/pandas/core/arrays/numpy_.py in __setitem__(self, key, value)
    273             value = np.asarray(value, dtype=self._ndarray.dtype)
    274 
--> 275         self._ndarray[key] = value
    276 
    277     def __len__(self) -> int:

IndexError: arrays used as indices must be of integer (or boolean) type