Skip to content

Commit 4bc6074

Browse files
authored
feat: Add DataFrame.clone for pyarrow (#2288)
1 parent e3eef8e commit 4bc6074

File tree

2 files changed

+8
-9
lines changed

2 files changed

+8
-9
lines changed

narwhals/_arrow/dataframe.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -666,7 +666,8 @@ def collect(
666666
msg = f"Unsupported `backend` value: {backend}" # pragma: no cover
667667
raise AssertionError(msg) # pragma: no cover
668668

669-
clone = not_implemented()
669+
def clone(self) -> Self:
670+
return self._from_native_frame(self.native, validate_column_names=False)
670671

671672
def item(self: Self, row: int | None, column: int | str | None) -> Any:
672673
from narwhals._arrow.series import maybe_extract_py_scalar

tests/frame/clone_test.py

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,19 @@
11
from __future__ import annotations
22

3-
import pytest
4-
53
import narwhals.stable.v1 as nw
64
from tests.utils import ConstructorEager
75
from tests.utils import assert_equal_data
86

97

10-
def test_clone(
11-
request: pytest.FixtureRequest, constructor_eager: ConstructorEager
12-
) -> None:
13-
if "pyarrow_table" in str(constructor_eager):
14-
request.applymarker(pytest.mark.xfail)
15-
8+
def test_clone(constructor_eager: ConstructorEager) -> None:
169
expected = {"a": [1, 2], "b": [3, 4]}
10+
expected_mod = {"a": [1, 2], "b": [3, 4], "c": [4, 6]}
1711
df = nw.from_native(constructor_eager(expected), eager_only=True)
1812
df_clone = df.clone()
1913
assert df is not df_clone
2014
assert df._compliant_frame is not df_clone._compliant_frame
2115
assert_equal_data(df_clone, expected)
16+
df_clone_mod = df_clone.with_columns((nw.col("a") + nw.col("b")).alias("c"))
17+
assert_equal_data(df, expected)
18+
assert_equal_data(df_clone, expected)
19+
assert_equal_data(df_clone_mod, expected_mod)

0 commit comments

Comments
 (0)