|
8 | 8 | from collections.abc import (
|
9 | 9 | Iterator,
|
10 | 10 | Mapping,
|
| 11 | + Sequence, |
11 | 12 | )
|
12 | 13 | from dataclasses import make_dataclass
|
13 | 14 | from datetime import (
|
@@ -94,6 +95,19 @@ def __len__(self):
|
94 | 95 | return self._dict.__len__()
|
95 | 96 |
|
96 | 97 |
|
| 98 | +class ListWrapper(Sequence): |
| 99 | + _list: list |
| 100 | + |
| 101 | + def __init__(self, lst: list) -> None: |
| 102 | + self._list = lst |
| 103 | + |
| 104 | + def __getitem__(self, i): |
| 105 | + return self._list[i] |
| 106 | + |
| 107 | + def __len__(self): |
| 108 | + return self._list.__len__() |
| 109 | + |
| 110 | + |
97 | 111 | class TestDataFrameConstructors:
|
98 | 112 | def test_constructor_from_ndarray_with_str_dtype(self):
|
99 | 113 | # If we don't ravel/reshape around ensure_str_array, we end up
|
@@ -2931,6 +2945,36 @@ def test_from_dict_with_mapping(self):
|
2931 | 2945 | tm.assert_series_equal(df["A"], Series(idx, name="A"))
|
2932 | 2946 | tm.assert_series_equal(df["B"], Series(dr, name="B"))
|
2933 | 2947 |
|
| 2948 | + def test_from_mappiog_list(self): |
| 2949 | + idx = Index(date_range("20130101", periods=3, tz="US/Eastern"), name="foo") |
| 2950 | + dr = date_range("20130110", periods=3) |
| 2951 | + data = DataFrame({"A": idx, "B": dr}) |
| 2952 | + mapping_list = [ |
| 2953 | + DictWrapper(record) for record in data.to_dict(orient="records") |
| 2954 | + ] |
| 2955 | + |
| 2956 | + # construction |
| 2957 | + df = DataFrame(mapping_list) |
| 2958 | + assert df["A"].dtype, "M8[ns, US/Eastern" |
| 2959 | + assert df["A"].name == "A" |
| 2960 | + tm.assert_series_equal(df["A"], Series(idx, name="A")) |
| 2961 | + tm.assert_series_equal(df["B"], Series(dr, name="B")) |
| 2962 | + |
| 2963 | + def test_from_mappiog_sequence(self): |
| 2964 | + idx = Index(date_range("20130101", periods=3, tz="US/Eastern"), name="foo") |
| 2965 | + dr = date_range("20130110", periods=3) |
| 2966 | + data = DataFrame({"A": idx, "B": dr}) |
| 2967 | + mapping_list = ListWrapper( |
| 2968 | + [DictWrapper(record) for record in data.to_dict(orient="records")] |
| 2969 | + ) |
| 2970 | + |
| 2971 | + # construction |
| 2972 | + df = DataFrame(mapping_list) |
| 2973 | + assert df["A"].dtype, "M8[ns, US/Eastern" |
| 2974 | + assert df["A"].name == "A" |
| 2975 | + tm.assert_series_equal(df["A"], Series(idx, name="A")) |
| 2976 | + tm.assert_series_equal(df["B"], Series(dr, name="B")) |
| 2977 | + |
2934 | 2978 | def test_from_index(self):
|
2935 | 2979 | # from index
|
2936 | 2980 | idx2 = date_range("20130101", periods=3, tz="US/Eastern", name="foo")
|
|
0 commit comments