Skip to content

Commit ee6ac29

Browse files
Feat/add collect schema to interchange dfs (#1646)
1 parent 45f48f4 commit ee6ac29

File tree

3 files changed

+16
-0
lines changed

3 files changed

+16
-0
lines changed

narwhals/_duckdb/dataframe.py

+8
Original file line numberDiff line numberDiff line change
@@ -151,3 +151,11 @@ def _change_version(self: Self, version: Version) -> Self:
151151

152152
def _from_native_frame(self: Self, df: Any) -> Self:
153153
return self.__class__(df, version=self._version)
154+
155+
def collect_schema(self) -> dict[str, DType]:
156+
return {
157+
column_name: native_to_narwhals_dtype(str(duckdb_dtype), self._version)
158+
for column_name, duckdb_dtype in zip(
159+
self._native_frame.columns, self._native_frame.types
160+
)
161+
}

narwhals/_ibis/dataframe.py

+6
Original file line numberDiff line numberDiff line change
@@ -129,3 +129,9 @@ def _change_version(self: Self, version: Version) -> Self:
129129

130130
def _from_native_frame(self: Self, df: Any) -> Self:
131131
return self.__class__(df, version=self._version)
132+
133+
def collect_schema(self) -> dict[str, DType]:
134+
return {
135+
column_name: native_to_narwhals_dtype(ibis_dtype, self._version)
136+
for column_name, ibis_dtype in self._native_frame.schema().items()
137+
}

tests/frame/interchange_schema_test.py

+2
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,7 @@ def test_interchange_schema_ibis(
156156
assert result == expected
157157
assert df["a"].dtype == nw.Int64
158158
assert df.columns == list(expected.keys())
159+
assert df.collect_schema() == expected
159160

160161

161162
def test_interchange_schema_duckdb() -> None:
@@ -221,6 +222,7 @@ def test_interchange_schema_duckdb() -> None:
221222
assert result == expected
222223
assert df["a"].dtype == nw.Int64
223224
assert df.columns == list(expected.keys())
225+
assert df.collect_schema() == expected
224226

225227

226228
def test_invalid() -> None:

0 commit comments

Comments
 (0)