Repository: modin-project/modin

Issue:
read_excel drops blank rows
### System information
- **OS Platform and Distribution (e.g., Linux Ubuntu 16.04)**: Windows 10
- **Modin version** (`modin.__version__`): 0.12.1
- **Python version**: 3.10.1
- **Code we can use to reproduce**:
```
import pandas as pd
import modin.pandas as md

pd_df = pd.read_excel("testing.xlsx)
md_df = md.read_excel("testing.xlsx")
print(pd_df.shape[0]-md_df.shape[0])
```

### Describe the problem
<!-- Describe the problem clearly here. -->
When reading an excel file, modin drops blank rows, while pandas does not. I don't know how to prevent modin from skipping blank rows.
### Source code / logs
<!-- Include any logs or source code that would be helpful to diagnose the problem. If including tracebacks, please include the full traceback. Large logs and files should be attached. Try to provide a reproducible test case that is the bare minimum necessary to generate the problem. -->
File to reproduce the issue:
[testing.xlsx](https://github.com/modin-project/modin/files/7776925/testing.xlsx)



Discussion:
@ElLorans Thanks for filing the Github issue, I was able to reproduce and will be fixing it as part of this release

Resolving patch:
diff --git a/modin/core/storage_formats/pandas/parsers.py b/modin/core/storage_formats/pandas/parsers.py
--- a/modin/core/storage_formats/pandas/parsers.py
+++ b/modin/core/storage_formats/pandas/parsers.py
@@ -564,12 +564,14 @@ def update_row_nums(match):
             has_index_names=is_list_like(header) and len(header) > 1,
             skiprows=skiprows,
             usecols=usecols,
+            skip_blank_lines=False,
             **kwargs,
         )
-        # In excel if you create a row with only a border (no values), this parser will
-        # interpret that as a row of NaN values. pandas discards these values, so we
-        # also must discard these values.
-        pandas_df = parser.read().dropna(how="all")
+        pandas_df = parser.read()
+        if len(pandas_df) > 1 and pandas_df.isnull().all().all():
+            # Drop NaN rows at the end of the DataFrame
+            pandas_df = pandas.DataFrame(columns=pandas_df.columns)
+
         # Since we know the number of rows that occur before this partition, we can
         # correctly assign the index in cases of RangeIndex. If it is not a RangeIndex,
         # the index is already correct because it came from the data.


Test patch:
diff --git a/modin/pandas/test/data/every_other_row_nan.xlsx b/modin/pandas/test/data/every_other_row_nan.xlsx
new file mode 100644
Binary files /dev/null and b/modin/pandas/test/data/every_other_row_nan.xlsx differ
diff --git a/modin/pandas/test/data/test_border_rows.xlsx b/modin/pandas/test/data/test_border_rows.xlsx
new file mode 100644
Binary files /dev/null and b/modin/pandas/test/data/test_border_rows.xlsx differ
diff --git a/modin/pandas/test/data/test_empty_rows.xlsx b/modin/pandas/test/data/test_empty_rows.xlsx
new file mode 100644
Binary files /dev/null and b/modin/pandas/test/data/test_empty_rows.xlsx differ
diff --git a/modin/pandas/test/test_io.py b/modin/pandas/test/test_io.py
--- a/modin/pandas/test/test_io.py
+++ b/modin/pandas/test/test_io.py
@@ -1600,6 +1600,30 @@ def test_excel_empty_line(self):
         modin_df = pd.read_excel(path)
         assert str(modin_df)
 
+    @check_file_leaks
+    def test_read_excel_empty_rows(self):
+        # Test parsing empty rows in middle of excel dataframe as NaN values
+        eval_io(
+            fn_name="read_excel",
+            io="modin/pandas/test/data/test_empty_rows.xlsx",
+        )
+
+    @check_file_leaks
+    def test_read_excel_border_rows(self):
+        # Test parsing border rows as NaN values in excel dataframe
+        eval_io(
+            fn_name="read_excel",
+            io="modin/pandas/test/data/test_border_rows.xlsx",
+        )
+
+    @check_file_leaks
+    def test_read_excel_every_other_nan(self):
+        # Test for reading excel dataframe with every other row as a NaN value
+        eval_io(
+            fn_name="read_excel",
+            io="modin/pandas/test/data/every_other_row_nan.xlsx",
+        )
+
     @pytest.mark.parametrize(
         "sheet_name",
         [