diff --git a/dataframely/schema.py b/dataframely/schema.py index b64f061..8cf787c 100644 --- a/dataframely/schema.py +++ b/dataframely/schema.py @@ -38,6 +38,7 @@ ParquetStorageBackend, ) from ._typing import DataFrame, LazyFrame, Validation +from .columns import Any as AnyColumn from .columns import Column, column_from_dict from .config import Config from .exc import ( @@ -814,7 +815,9 @@ def cast( further down the line might fail because of the cast and/or missing columns. """ lf = df.lazy().select( - pl.col(name).cast(col.dtype) for name, col in cls.columns().items() + # Skip casting for Any columns since they accept any type + pl.col(name) if isinstance(col, AnyColumn) else pl.col(name).cast(col.dtype) + for name, col in cls.columns().items() ) if isinstance(df, pl.DataFrame): return lf.collect() # type: ignore diff --git a/tests/column_types/test_any.py b/tests/column_types/test_any.py index 4668df8..5c00180 100644 --- a/tests/column_types/test_any.py +++ b/tests/column_types/test_any.py @@ -20,3 +20,9 @@ class AnySchema(dy.Schema): def test_any_dtype_passes(data: dict[str, Any]) -> None: df = pl.DataFrame(data) assert AnySchema.is_valid(df) + + +def test_any_cast() -> None: + df = pl.DataFrame({"a": 0}) + result = AnySchema.cast(df) + assert result["a"].dtype == pl.Int64