From b2ee3636f068a961bc54e3b998395058d229d724 Mon Sep 17 00:00:00 2001 From: Eric Jolibois Date: Wed, 17 Jul 2024 14:56:29 +0200 Subject: [PATCH 1/3] feat: cast bools to strings if mixed types --- python/tests/fixtures/sheet-bool.xlsx | Bin 0 -> 9567 bytes python/tests/test_fastexcel.py | 13 +++++++++++++ src/types/dtype.rs | 1 + src/types/python/excelsheet/sheet_data.rs | 2 ++ 4 files changed, 16 insertions(+) create mode 100644 python/tests/fixtures/sheet-bool.xlsx diff --git a/python/tests/fixtures/sheet-bool.xlsx b/python/tests/fixtures/sheet-bool.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..b49790e4ae1cface1b33d3ba7378041517bfe9ed GIT binary patch literal 9567 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 TAHQTE0@}bu!F#Zq2>|>*) None: pd_expected = pd.DataFrame(expected) pd_expected["Date"] = pd_expected["Date"].dt.as_unit("ms") pd_assert_frame_equal(sheet.to_pandas(), pd_expected) + + +def test_bool_casting_to_string_for_polars() -> None: + excel_reader = fastexcel.read_excel(path_for_fixture("sheet-bool.xlsx")) + + actual_polars_df = excel_reader.load_sheet(0, header_row=None, column_names=["0"]).to_polars() + expected_polars_df = pl.DataFrame( + { + "0": ["true", "false", "some string"], + } + ) + + pl_assert_frame_equal(actual_polars_df, expected_polars_df) diff --git a/src/types/dtype.rs b/src/types/dtype.rs index e264949..9af844a 100644 --- a/src/types/dtype.rs +++ b/src/types/dtype.rs @@ -224,6 +224,7 @@ fn int_types() -> &'static HashSet { fn string_types() -> &'static HashSet { STRING_TYPES_CELL.get_or_init(|| { HashSet::from([ + DType::Bool, DType::Int, DType::Float, DType::String, diff --git a/src/types/python/excelsheet/sheet_data.rs b/src/types/python/excelsheet/sheet_data.rs index 5a4b337..88b68d2 100644 --- a/src/types/python/excelsheet/sheet_data.rs +++ b/src/types/python/excelsheet/sheet_data.rs @@ -134,6 +134,8 @@ mod array_impls { .map(|dt| dt.to_string()) } else if cell.is_datetime_iso() { cell.get_datetime_iso().map(str::to_string) + } else if cell.is_bool() { + cell.get_bool().map(|v| v.to_string()) } else { cell.as_string() } From a0e7425fd4bc3f3954ebb38b4eb5832008634326 Mon Sep 17 00:00:00 2001 From: Eric Jolibois Date: Wed, 17 Jul 2024 15:02:13 +0200 Subject: [PATCH 2/3] test: rewrite a bit --- python/tests/test_fastexcel.py | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/python/tests/test_fastexcel.py b/python/tests/test_fastexcel.py index 6ffb471..ef8aff2 100644 --- a/python/tests/test_fastexcel.py +++ b/python/tests/test_fastexcel.py @@ -582,14 +582,11 @@ def test_null_values_in_cells() -> None: pd_assert_frame_equal(sheet.to_pandas(), pd_expected) -def test_bool_casting_to_string_for_polars() -> None: +def test_bool_casting_to_string() -> None: excel_reader = fastexcel.read_excel(path_for_fixture("sheet-bool.xlsx")) - - actual_polars_df = excel_reader.load_sheet(0, header_row=None, column_names=["0"]).to_polars() - expected_polars_df = pl.DataFrame( - { - "0": ["true", "false", "some string"], - } - ) - - pl_assert_frame_equal(actual_polars_df, expected_polars_df) + sheet = excel_reader.load_sheet(0, column_names=["col1"]) + expected = { + "col1": ["true", "false", "some string"], + } + pl_assert_frame_equal(sheet.to_polars(), pl.DataFrame(expected)) + pd_assert_frame_equal(sheet.to_pandas(), pd.DataFrame(expected)) From eff563d578a47fe1492bb772c6329fb27a7002e3 Mon Sep 17 00:00:00 2001 From: Eric Jolibois Date: Fri, 19 Jul 2024 09:31:01 +0200 Subject: [PATCH 3/3] test: move to right place --- .../fixture-multi-dtypes-columns.xlsx | Bin 7119 -> 6250 bytes python/tests/fixtures/sheet-bool.xlsx | Bin 9567 -> 0 bytes python/tests/test_dtypes.py | 2 ++ python/tests/test_fastexcel.py | 10 ---------- 4 files changed, 2 insertions(+), 10 deletions(-) delete mode 100644 python/tests/fixtures/sheet-bool.xlsx diff --git a/python/tests/fixtures/fixture-multi-dtypes-columns.xlsx b/python/tests/fixtures/fixture-multi-dtypes-columns.xlsx index 4e7211dbd60058700a08dd035680422e28d43879..384af6d56a6408a27d86bc092e6d22b2829e53a3 100644 GIT binary patch literal 6250 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 a;QxRT1!;u)kOBaY@2~dzvUL74X#WGNlt?!K diff --git a/python/tests/fixtures/sheet-bool.xlsx b/python/tests/fixtures/sheet-bool.xlsx deleted file mode 100644 index b49790e4ae1cface1b33d3ba7378041517bfe9ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9567 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 TAHQTE0@}bu!F#Zq2>|>*) dict[str, list[Any]]: "Details": ["Healthcare"] * 7 + ["Something"] * 2, "Asset ID": ["84444"] * 7 + ["ABC123"] * 2, "Mixed dates": ["2023-07-21 00:00:00"] * 6 + ["July 23rd"] * 3, + "Mixed bools": ["true"] * 5 + ["false"] * 3 + ["other"], } @@ -92,6 +93,7 @@ def test_sheet_with_mixed_dtypes_and_sample_rows(expected_data: dict[str, list[A ] expected_data["Asset ID"] = [84444.0] * 7 + [None] * 2 expected_data["Mixed dates"] = [datetime(2023, 7, 21)] * 6 + [None] * 3 + expected_data["Mixed bools"] = [True] * 5 + [False] * 3 + [None] pd_df = sheet.to_pandas() pd_assert_frame_equal( diff --git a/python/tests/test_fastexcel.py b/python/tests/test_fastexcel.py index ef8aff2..632a491 100644 --- a/python/tests/test_fastexcel.py +++ b/python/tests/test_fastexcel.py @@ -580,13 +580,3 @@ def test_null_values_in_cells() -> None: pd_expected = pd.DataFrame(expected) pd_expected["Date"] = pd_expected["Date"].dt.as_unit("ms") pd_assert_frame_equal(sheet.to_pandas(), pd_expected) - - -def test_bool_casting_to_string() -> None: - excel_reader = fastexcel.read_excel(path_for_fixture("sheet-bool.xlsx")) - sheet = excel_reader.load_sheet(0, column_names=["col1"]) - expected = { - "col1": ["true", "false", "some string"], - } - pl_assert_frame_equal(sheet.to_polars(), pl.DataFrame(expected)) - pd_assert_frame_equal(sheet.to_pandas(), pd.DataFrame(expected))