diff --git a/narwhals/_arrow/dataframe.py b/narwhals/_arrow/dataframe.py index 120d11f3fc..3d250970e0 100644 --- a/narwhals/_arrow/dataframe.py +++ b/narwhals/_arrow/dataframe.py @@ -591,7 +591,14 @@ def collect( raise AssertionError(msg) # pragma: no cover def clone(self) -> Self: - return self._with_native(self.native, validate_column_names=False) + native = self.native + if self._backend_version < (14, 0, 0): + cloned_table = pa.table( + {col: native.column(col).combine_chunks() for col in native.column_names} + ) + else: + cloned_table = pa.table(native) + return self._with_native(cloned_table, validate_column_names=False) def item(self, row: int | None, column: int | str | None) -> Any: from narwhals._arrow.series import maybe_extract_py_scalar diff --git a/tests/frame/clone_test.py b/tests/frame/clone_test.py index 66b9771835..eb7394544d 100644 --- a/tests/frame/clone_test.py +++ b/tests/frame/clone_test.py @@ -11,6 +11,7 @@ def test_clone(constructor_eager: ConstructorEager) -> None: df_clone = df.clone() assert df is not df_clone assert df._compliant_frame is not df_clone._compliant_frame + assert df.to_native() is not df_clone.to_native() assert_equal_data(df_clone, expected) df_clone_mod = df_clone.with_columns((nw.col("a") + nw.col("b")).alias("c")) assert_equal_data(df, expected)