diff --git a/polars/polars-io/src/ipc.rs b/polars/polars-io/src/ipc.rs index 9c2d4b25870b..5675b3d48fcf 100644 --- a/polars/polars-io/src/ipc.rs +++ b/polars/polars-io/src/ipc.rs @@ -119,11 +119,7 @@ impl IpcReader { ) -> Result { let rechunk = self.rechunk; let metadata = read::read_file_metadata(&mut self.reader)?; - let projection = projection.map(|x| { - let mut x = x.to_vec(); - x.sort_unstable(); - x - }); + let projection = projection.map(|x| x.to_vec()); let schema = if let Some(projection) = &projection { apply_projection(&metadata.schema, projection) @@ -180,11 +176,7 @@ where let schema = &metadata.schema; if let Some(columns) = self.columns { - let mut prj = columns_to_projection(columns, schema)?; - - // Ipc reader panics if the projection is not in increasing order, so sorting is the safer way. - prj.sort_unstable(); - self.projection = Some(prj); + self.projection = Some(columns_to_projection(columns, schema)?); } let schema = if let Some(projection) = &self.projection { diff --git a/py-polars/tests/io/test_ipc.py b/py-polars/tests/io/test_ipc.py index 4f92b519d8bd..d63780953e8b 100644 --- a/py-polars/tests/io/test_ipc.py +++ b/py-polars/tests/io/test_ipc.py @@ -39,24 +39,24 @@ def test_from_to_file( def test_select_columns() -> None: df = pl.DataFrame({"a": [1, 2, 3], "b": [True, False, True], "c": ["a", "b", "c"]}) - expected = pl.DataFrame({"b": [True, False, True], "c": ["a", "b", "c"]}) + expected = pl.DataFrame({"c": ["a", "b", "c"], "b": [True, False, True]}) f = io.BytesIO() df.write_ipc(f) f.seek(0) - read_df = pl.read_ipc(f, columns=["b", "c"], use_pyarrow=False) + read_df = pl.read_ipc(f, columns=["c", "b"], use_pyarrow=False) assert expected.frame_equal(read_df) def test_select_projection() -> None: df = pl.DataFrame({"a": [1, 2, 3], "b": [True, False, True], "c": ["a", "b", "c"]}) - expected = pl.DataFrame({"b": [True, False, True], "c": ["a", "b", "c"]}) + expected = pl.DataFrame({"c": ["a", "b", "c"], "b": [True, False, True]}) f = io.BytesIO() df.write_ipc(f) f.seek(0) - read_df = pl.read_ipc(f, columns=[1, 2], use_pyarrow=False) + read_df = pl.read_ipc(f, columns=[2, 1], use_pyarrow=False) assert expected.frame_equal(read_df)