Path: blob/main/py-polars/tests/unit/dataframe/test_to_dict.py
6939 views
from __future__ import annotations12from typing import Any34import pytest5from hypothesis import given67import polars as pl8from polars.testing import assert_frame_equal9from polars.testing.parametric import dataframes101112@given(13df=dataframes(14excluded_dtypes=[15pl.Categorical, # Bug: https://github.com/pola-rs/polars/issues/1619616pl.Struct,17],18# Roundtrip doesn't work with time zones:19# https://github.com/pola-rs/polars/issues/1629720allow_time_zones=False,21)22)23def test_to_dict(df: pl.DataFrame) -> None:24d = df.to_dict(as_series=False)25result = pl.from_dict(d, schema=df.schema)26assert_frame_equal(df, result, categorical_as_str=True)272829@pytest.mark.parametrize(30("as_series", "inner_dtype"),31[32(True, pl.Series),33(False, list),34],35)36def test_to_dict_misc(as_series: bool, inner_dtype: Any) -> None:37df = pl.DataFrame(38{39"A": [1, 2, 3, 4, 5],40"fruits": ["banana", "banana", "apple", "apple", "banana"],41"B": [5, 4, 3, 2, 1],42"cars": ["beetle", "audi", "beetle", "beetle", "beetle"],43"optional": [28, 300, None, 2, -30],44}45)46s = df.to_dict(as_series=as_series)47assert isinstance(s, dict)48for v in s.values():49assert isinstance(v, inner_dtype)50assert len(v) == df.height515253