Insert item at selected position. Parameters ---------- loc : int item : hashable value : np.ndarray or ExtensionArray refs : The reference tracking object of the value to set.
(self, loc: int, item: Hashable, value: ArrayLike, refs=None)
| 1542 | self.iset(loc, new_mgr._block.values, inplace=True) |
| 1543 | |
| 1544 | def insert(self, loc: int, item: Hashable, value: ArrayLike, refs=None) -> None: |
| 1545 | """ |
| 1546 | Insert item at selected position. |
| 1547 | |
| 1548 | Parameters |
| 1549 | ---------- |
| 1550 | loc : int |
| 1551 | item : hashable |
| 1552 | value : np.ndarray or ExtensionArray |
| 1553 | refs : The reference tracking object of the value to set. |
| 1554 | """ |
| 1555 | new_axis = self.items.insert(loc, item) |
| 1556 | |
| 1557 | if value.ndim == 2: |
| 1558 | value = value.T |
| 1559 | if len(value) > 1: |
| 1560 | raise ValueError( |
| 1561 | f"Expected a 1D array, got an array with shape {value.T.shape}" |
| 1562 | ) |
| 1563 | else: |
| 1564 | value = ensure_block_shape(value, ndim=self.ndim) |
| 1565 | |
| 1566 | bp = BlockPlacement(slice(loc, loc + 1)) |
| 1567 | block = new_block_2d(values=value, placement=bp, refs=refs) |
| 1568 | |
| 1569 | if not len(self.blocks): |
| 1570 | # Fastpath |
| 1571 | self._blklocs = np.array([0], dtype=np.intp) |
| 1572 | self._blknos = np.array([0], dtype=np.intp) |
| 1573 | else: |
| 1574 | self._insert_update_mgr_locs(loc) |
| 1575 | self._insert_update_blklocs_and_blknos(loc) |
| 1576 | |
| 1577 | self.axes[0] = new_axis |
| 1578 | self.blocks += (block,) |
| 1579 | |
| 1580 | self._known_consolidated = False |
| 1581 | |
| 1582 | if ( |
| 1583 | get_option("performance_warnings") |
| 1584 | and sum(not block.is_extension for block in self.blocks) > 100 |
| 1585 | ): |
| 1586 | warnings.warn( |
| 1587 | "DataFrame is highly fragmented. This is usually the result " |
| 1588 | "of calling `frame.insert` many times, which has poor performance. " |
| 1589 | "Consider joining all columns at once using pd.concat(axis=1) " |
| 1590 | "instead. To get a de-fragmented frame, use `newframe = frame.copy()`", |
| 1591 | PerformanceWarning, |
| 1592 | stacklevel=find_stack_level(), |
| 1593 | ) |
| 1594 | |
| 1595 | def _insert_update_mgr_locs(self, loc) -> None: |
| 1596 | """ |
nothing calls this directly
no test coverage detected