From dc8285ffbb34532b227230ea79517e4ee3eb0abb Mon Sep 17 00:00:00 2001 From: Abu Jabar Mubarak <139158216+abujabarmubarak@users.noreply.github.com> Date: Mon, 28 Jul 2025 23:19:07 +0530 Subject: [PATCH 1/3] Handle engine='polars' --- pandas/io/parsers/readers.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/pandas/io/parsers/readers.py b/pandas/io/parsers/readers.py index 4fbd71ed03662..8660b9e498d4a 100644 --- a/pandas/io/parsers/readers.py +++ b/pandas/io/parsers/readers.py @@ -679,6 +679,24 @@ def _read( kwds["parse_dates"] = False else: kwds["parse_dates"] = True + # 🆕 Handle engine='polars' + if kwds.get("engine") == "polars": + try: + import polars as pl + except ImportError: + raise ImportError( + "Polars is not installed. Please install it with 'pip install polars'." + ) + + pl_args = {} + if "nrows" in kwds: + pl_args["n_rows"] = kwds["nrows"] + if "encoding" in kwds: + pl_args["encoding"] = kwds["encoding"] + + df = pl.read_csv(filepath_or_buffer, **pl_args) + return df.to_pandas() + # Extract some of the arguments (pass chunksize on). iterator = kwds.get("iterator", False) From d39a26b6d07ffac9cfdd62c771b3850ab34dd5bc Mon Sep 17 00:00:00 2001 From: Abu Jabar Mubarak <139158216+abujabarmubarak@users.noreply.github.com> Date: Mon, 28 Jul 2025 23:23:05 +0530 Subject: [PATCH 2/3] Update engine validation --- pandas/io/parsers/readers.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pandas/io/parsers/readers.py b/pandas/io/parsers/readers.py index 8660b9e498d4a..53d06272a771a 100644 --- a/pandas/io/parsers/readers.py +++ b/pandas/io/parsers/readers.py @@ -1809,6 +1809,9 @@ def _refine_defaults_read( kwds["delimiter"] = delimiter if engine is not None: + if engine not in ["c", "python", "pyarrow", "polars"]: + raise ValueError(f"Unknown engine: {engine}") + kwds["engine"] = engine kwds["engine_specified"] = True else: kwds["engine"] = "c" From c9df57728823a7a517d21b859d00f812a2a7103a Mon Sep 17 00:00:00 2001 From: Abu Jabar Mubarak <139158216+abujabarmubarak@users.noreply.github.com> Date: Mon, 28 Jul 2025 23:31:12 +0530 Subject: [PATCH 3/3] TEST: Add engine='polars' support test for read_csv --- pandas/io/parsers/test_read_csv_polars.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 pandas/io/parsers/test_read_csv_polars.py diff --git a/pandas/io/parsers/test_read_csv_polars.py b/pandas/io/parsers/test_read_csv_polars.py new file mode 100644 index 0000000000000..2647915d75782 --- /dev/null +++ b/pandas/io/parsers/test_read_csv_polars.py @@ -0,0 +1,12 @@ +import pytest + +def test_read_csv_with_polars(tmp_path): + pl = pytest.importorskip("polars") + pd = pytest.importorskip("pandas") + + file = tmp_path / "data.csv" + file.write_text("a,b\n1,2\n3,4") + + df = pd.read_csv(file, engine="polars") + assert df.shape == (2, 2) + assert list(df.columns) == ["a", "b"]