diff --git a/pandas/io/formats/format.py b/pandas/io/formats/format.py index 6b201f6bf3cfe..8c763cbab41b3 100644 --- a/pandas/io/formats/format.py +++ b/pandas/io/formats/format.py @@ -696,9 +696,9 @@ def _truncate_vertically(self) -> None: assert self.max_rows_fitted is not None row_num = self.max_rows_fitted // 2 if row_num >= 1: - head = self.tr_frame.iloc[:row_num, :] - tail = self.tr_frame.iloc[-row_num:, :] - self.tr_frame = concat((head, tail)) + _len = len(self.tr_frame) + _slice = np.hstack([np.arange(row_num), np.arange(_len - row_num, _len)]) + self.tr_frame = self.tr_frame.iloc[_slice] else: row_num = cast(int, self.max_rows) self.tr_frame = self.tr_frame.iloc[:row_num, :] diff --git a/pandas/tests/io/formats/test_format.py b/pandas/tests/io/formats/test_format.py index b3b718a81ccf5..218e371366456 100644 --- a/pandas/tests/io/formats/test_format.py +++ b/pandas/tests/io/formats/test_format.py @@ -171,6 +171,12 @@ def test_repr_truncation(self): with option_context("display.max_colwidth", max_len + 2): assert "..." not in repr(df) + def test_repr_truncation_preserves_na(self): + # https://github.com/pandas-dev/pandas/issues/55630 + df = DataFrame({"a": [pd.NA for _ in range(10)]}) + with option_context("display.max_rows", 2, "display.show_dimensions", False): + assert repr(df) == " a\n0 \n.. ...\n9 " + def test_max_colwidth_negative_int_raises(self): # Deprecation enforced from: # https://github.com/pandas-dev/pandas/issues/31532