BUG: cannot set Series with reverse slicer · Issue #26939 · pandas-dev/pandas (original) (raw)

Minimal example:

>>> import pandas as pd
>>> s = pd.Series(index=range(2010, 2020))
>>> s.loc[2015:2010:-1] = [6, 5, 4, 3, 2, 1]
Traceback (most recent call last):
[...]
ValueError: cannot set using a slice indexer with a different length than the value

I see no reason why this shouldn't work, as setting with the forward slicer works without problems, and getting with the reverse slicer also works without issue:

>>> # turn list around because slicer is (not) reversed compared to above
>>> s.loc[2010:2015] = [6, 5, 4, 3, 2, 1][::-1]
>>> s
2010    1.0
2011    2.0
2012    3.0
2013    4.0
2014    5.0
2015    6.0
2016    NaN
2017    NaN
2018    NaN
2019    NaN
dtype: float64
>>> s.loc[2015:2010:-1] == [6, 5, 4, 3, 2, 1]  # comparison, not assignment
2015    True
2014    True
2013    True
2012    True
2011    True
2010    True
dtype: bool

PS: For the failure, it does not matter if the RHS is a np.array, etc.