Return the expected length of target[indexer] Returns ------- int
(indexer, target=None)
| 290 | |
| 291 | |
| 292 | def length_of_indexer(indexer, target=None) -> int: |
| 293 | """ |
| 294 | Return the expected length of target[indexer] |
| 295 | |
| 296 | Returns |
| 297 | ------- |
| 298 | int |
| 299 | """ |
| 300 | if target is not None and isinstance(indexer, slice): |
| 301 | target_len = len(target) |
| 302 | start = indexer.start |
| 303 | stop = indexer.stop |
| 304 | step = indexer.step |
| 305 | if start is None: |
| 306 | start = 0 |
| 307 | elif start < 0: |
| 308 | start += target_len |
| 309 | if stop is None or stop > target_len: |
| 310 | stop = target_len |
| 311 | elif stop < 0: |
| 312 | stop += target_len |
| 313 | if step is None: |
| 314 | step = 1 |
| 315 | elif step < 0: |
| 316 | start, stop = stop + 1, start + 1 |
| 317 | step = -step |
| 318 | return (stop - start + step - 1) // step |
| 319 | elif isinstance(indexer, (ABCSeries, ABCIndex, np.ndarray, list)): |
| 320 | if isinstance(indexer, list): |
| 321 | indexer = np.array(indexer) |
| 322 | |
| 323 | if indexer.dtype == bool: |
| 324 | # GH#25774 |
| 325 | return indexer.sum() |
| 326 | return len(indexer) |
| 327 | elif isinstance(indexer, range): |
| 328 | return (indexer.stop - indexer.start) // indexer.step |
| 329 | elif not is_list_like_indexer(indexer): |
| 330 | return 1 |
| 331 | raise AssertionError("cannot find the length of the indexer") |
| 332 | |
| 333 | |
| 334 | def disallow_ndim_indexing(result) -> None: |