From 1e912821c03f08784cd12c046999c2033d94dd85 Mon Sep 17 00:00:00 2001 From: Andrew Hawryluk Date: Mon, 26 Apr 2021 10:31:40 -0600 Subject: [PATCH 1/4] Add test_trailing_blanks, which currently fails --- pandas/tests/io/data/excel/trailing_blanks.ods | Bin 0 -> 3060 bytes pandas/tests/io/data/excel/trailing_blanks.xls | Bin 0 -> 25600 bytes pandas/tests/io/data/excel/trailing_blanks.xlsb | Bin 0 -> 8086 bytes pandas/tests/io/data/excel/trailing_blanks.xlsm | Bin 0 -> 8824 bytes pandas/tests/io/data/excel/trailing_blanks.xlsx | Bin 0 -> 8806 bytes pandas/tests/io/excel/test_readers.py | 9 +++++++++ 6 files changed, 9 insertions(+) create mode 100644 pandas/tests/io/data/excel/trailing_blanks.ods create mode 100644 pandas/tests/io/data/excel/trailing_blanks.xls create mode 100644 pandas/tests/io/data/excel/trailing_blanks.xlsb create mode 100644 pandas/tests/io/data/excel/trailing_blanks.xlsm create mode 100644 pandas/tests/io/data/excel/trailing_blanks.xlsx diff --git a/pandas/tests/io/data/excel/trailing_blanks.ods b/pandas/tests/io/data/excel/trailing_blanks.ods new file mode 100644 index 0000000000000000000000000000000000000000..a56fbfe452387400896ab49e0bead05f44d0e779 GIT binary patch literal 3060 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 literal 0 HcmV?d00001 diff --git a/pandas/tests/io/data/excel/trailing_blanks.xls b/pandas/tests/io/data/excel/trailing_blanks.xls new file mode 100644 index 0000000000000000000000000000000000000000..32aeb3fe36b056985c979bccece3f0d9667d55fd GIT binary patch literal 25600 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 M2{?Prh`(9<59YgwBme*a literal 0 HcmV?d00001 diff --git a/pandas/tests/io/data/excel/trailing_blanks.xlsm b/pandas/tests/io/data/excel/trailing_blanks.xlsm new file mode 100644 index 0000000000000000000000000000000000000000..9f8ca5370ef81da3c0e63710ff6ffe57c8bed136 GIT binary patch literal 8824 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 literal 0 HcmV?d00001 diff --git a/pandas/tests/io/data/excel/trailing_blanks.xlsx b/pandas/tests/io/data/excel/trailing_blanks.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..8f1a739be9078b49c6588643c8327dbadfcb2834 GIT binary patch literal 8806 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 Date: Thu, 29 Apr 2021 15:37:55 -0600 Subject: [PATCH 2/4] Trim trailing blank cells from xlsx/m and xlsb --- pandas/io/excel/_openpyxl.py | 9 ++++++--- pandas/io/excel/_pyxlsb.py | 28 ++++++++++++++++++++++++---- 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/pandas/io/excel/_openpyxl.py b/pandas/io/excel/_openpyxl.py index a99f8e2625602..2071076d04a24 100644 --- a/pandas/io/excel/_openpyxl.py +++ b/pandas/io/excel/_openpyxl.py @@ -571,15 +571,18 @@ def get_sheet_data(self, sheet, convert_float: bool) -> list[list[Scalar]]: last_row_with_data = -1 for row_number, row in enumerate(sheet.rows): converted_row = [self._convert_cell(cell, convert_float) for cell in row] - if not all(cell == "" for cell in converted_row): + while converted_row and converted_row[-1] == "": + # trim trailing empty elements + converted_row.pop() + if converted_row: last_row_with_data = row_number data.append(converted_row) # Trim trailing empty rows data = data[: last_row_with_data + 1] - if self.book.read_only and len(data) > 0: - # With dimension reset, openpyxl no longer pads rows + if len(data) > 0: + # extend rows to max width max_width = max(len(data_row) for data_row in data) if min(len(data_row) for data_row in data) < max_width: empty_cell: list[Scalar] = [""] diff --git a/pandas/io/excel/_pyxlsb.py b/pandas/io/excel/_pyxlsb.py index 71ec189854f6d..02b8090adcfdf 100644 --- a/pandas/io/excel/_pyxlsb.py +++ b/pandas/io/excel/_pyxlsb.py @@ -75,7 +75,27 @@ def _convert_cell(self, cell, convert_float: bool) -> Scalar: return cell.v def get_sheet_data(self, sheet, convert_float: bool) -> List[List[Scalar]]: - return [ - [self._convert_cell(c, convert_float) for c in r] - for r in sheet.rows(sparse=False) - ] + data: list[list[Scalar]] = [] + prevous_row_number = -1 + # When sparse=True the rows can have different lengths and empty rows are + # not returned. The cells are namedtuples of row, col, value (r, c, v). + for row in sheet.rows(sparse=True): + row_number = row[0].r + converted_row = [self._convert_cell(cell, convert_float) for cell in row] + while converted_row and converted_row[-1] == "": + # trim trailing empty elements + converted_row.pop() + if converted_row: + data.extend([[]] * (row_number - prevous_row_number - 1)) + data.append(converted_row) + prevous_row_number = row_number + if data: + # extend rows to max_width + max_width = max(len(data_row) for data_row in data) + if min(len(data_row) for data_row in data) < max_width: + empty_cell: list[Scalar] = [""] + data = [ + data_row + (max_width - len(data_row)) * empty_cell + for data_row in data + ] + return data From 6218039b05d0a4f4308de4ac6e99fdbcac53b16c Mon Sep 17 00:00:00 2001 From: Andrew Hawryluk Date: Thu, 29 Apr 2021 17:00:23 -0600 Subject: [PATCH 3/4] whatsnew entry --- doc/source/whatsnew/v1.3.0.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/source/whatsnew/v1.3.0.rst b/doc/source/whatsnew/v1.3.0.rst index 842b50ce53b21..8dd25d38df2b0 100644 --- a/doc/source/whatsnew/v1.3.0.rst +++ b/doc/source/whatsnew/v1.3.0.rst @@ -797,6 +797,7 @@ I/O - Bug in :func:`read_excel` raising ``AttributeError`` with ``MultiIndex`` header followed by two empty rows and no index, and bug affecting :func:`read_excel`, :func:`read_csv`, :func:`read_table`, :func:`read_fwf`, and :func:`read_clipboard` where one blank row after a ``MultiIndex`` header with no index would be dropped (:issue:`40442`) - Bug in :meth:`DataFrame.to_string` misplacing the truncation column when ``index=False`` (:issue:`40907`) - Bug in :func:`read_orc` always raising ``AttributeError`` (:issue:`40918`) +- Bug in :func:`read_excel` loading trailing empty rows/columns for some filetypes (:issue:`41167`) Period ^^^^^^ From 0962d212e76ae7878dcc507aa47d9fb7e95b990c Mon Sep 17 00:00:00 2001 From: Andrew Hawryluk Date: Wed, 5 May 2021 15:43:09 -0600 Subject: [PATCH 4/4] Move whatsnew item --- doc/source/whatsnew/v1.3.0.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/source/whatsnew/v1.3.0.rst b/doc/source/whatsnew/v1.3.0.rst index 79a9ca98aa356..1bad9401ba312 100644 --- a/doc/source/whatsnew/v1.3.0.rst +++ b/doc/source/whatsnew/v1.3.0.rst @@ -795,11 +795,11 @@ I/O - Bug in :func:`read_hdf` returning unexpected records when filtering on categorical string columns using ``where`` parameter (:issue:`39189`) - Bug in :func:`read_sas` raising ``ValueError`` when ``datetimes`` were null (:issue:`39725`) - Bug in :func:`read_excel` dropping empty values from single-column spreadsheets (:issue:`39808`) +- Bug in :func:`read_excel` loading trailing empty rows/columns for some filetypes (:issue:`41167`) - Bug in :func:`read_excel` raising ``AttributeError`` with ``MultiIndex`` header followed by two empty rows and no index, and bug affecting :func:`read_excel`, :func:`read_csv`, :func:`read_table`, :func:`read_fwf`, and :func:`read_clipboard` where one blank row after a ``MultiIndex`` header with no index would be dropped (:issue:`40442`) - Bug in :meth:`DataFrame.to_string` misplacing the truncation column when ``index=False`` (:issue:`40907`) - Bug in :func:`read_orc` always raising ``AttributeError`` (:issue:`40918`) - Bug in the conversion from pyarrow to pandas (e.g. for reading Parquet) with nullable dtypes and a pyarrow array whose data buffer size is not a multiple of dtype size (:issue:`40896`) -- Bug in :func:`read_excel` loading trailing empty rows/columns for some filetypes (:issue:`41167`) Period ^^^^^^