Skip to content

BUG: length_of_indexer() can return incorrect values that break slice assignments. #9995

Closed
@slonik-az

Description

@slonik-az

BUG DESCRIPTION:
length_of_indexer() (defined in pandas/core/indexing.py) returns incorrect result
if (stop-start) is not divisible by step. As a consequence some slice assignments
throw exceptions. Affected panda versions: 0.16.x, 0.15.x, current git master.

HOW TO REPRODUCE:

import pandas as pd
sr= pd.Series([-1]*6) # series with 6 elements indexed from 0 to 5.
sr[0::2]= [0,2,4] # setting even elements works fine!
sr[1::2]= [1,3,5] # setting odd elements results in error:

.../pandas/core/internals.pyc in setitem(self, indexer, value)
568 if is_list_like(value) and l:
569 if len(value) != length_of_indexer(indexer, values):
--> 570 raise ValueError("cannot set using a slice indexer with a "
571 "different length than the value")
572
ValueError: cannot set using a slice indexer with a different length than the value

BUG FIX: I fixed the bug (and created a new test case for it) in my private repo
and will submit a pull request shortly.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions