|
1 | 1 | # -*- coding: utf-8 -*-
|
2 | 2 |
|
3 | 3 | import pytest
|
| 4 | +import collections |
4 | 5 | import numpy as np
|
5 | 6 |
|
6 | 7 | from pandas import compat
|
|
13 | 14 |
|
14 | 15 | class TestDataFrameConvertTo(TestData):
|
15 | 16 |
|
16 |
| - def test_to_dict(self): |
17 |
| - test_data = { |
18 |
| - 'A': {'1': 1, '2': 2}, |
19 |
| - 'B': {'1': '1', '2': '2', '3': '3'}, |
20 |
| - } |
21 |
| - recons_data = DataFrame(test_data).to_dict() |
22 |
| - |
23 |
| - for k, v in compat.iteritems(test_data): |
24 |
| - for k2, v2 in compat.iteritems(v): |
25 |
| - assert v2 == recons_data[k][k2] |
26 |
| - |
27 |
| - recons_data = DataFrame(test_data).to_dict("l") |
28 |
| - |
29 |
| - for k, v in compat.iteritems(test_data): |
30 |
| - for k2, v2 in compat.iteritems(v): |
31 |
| - assert v2 == recons_data[k][int(k2) - 1] |
32 |
| - |
33 |
| - recons_data = DataFrame(test_data).to_dict("s") |
34 |
| - |
35 |
| - for k, v in compat.iteritems(test_data): |
36 |
| - for k2, v2 in compat.iteritems(v): |
37 |
| - assert v2 == recons_data[k][k2] |
38 |
| - |
39 |
| - recons_data = DataFrame(test_data).to_dict("sp") |
40 |
| - expected_split = {'columns': ['A', 'B'], 'index': ['1', '2', '3'], |
41 |
| - 'data': [[1.0, '1'], [2.0, '2'], [np.nan, '3']]} |
42 |
| - tm.assert_dict_equal(recons_data, expected_split) |
43 |
| - |
44 |
| - recons_data = DataFrame(test_data).to_dict("r") |
45 |
| - expected_records = [{'A': 1.0, 'B': '1'}, |
46 |
| - {'A': 2.0, 'B': '2'}, |
47 |
| - {'A': np.nan, 'B': '3'}] |
48 |
| - assert isinstance(recons_data, list) |
49 |
| - assert len(recons_data) == 3 |
50 |
| - for l, r in zip(recons_data, expected_records): |
51 |
| - tm.assert_dict_equal(l, r) |
52 |
| - |
53 |
| - # GH10844 |
54 |
| - recons_data = DataFrame(test_data).to_dict("i") |
55 |
| - |
56 |
| - for k, v in compat.iteritems(test_data): |
57 |
| - for k2, v2 in compat.iteritems(v): |
58 |
| - assert v2 == recons_data[k2][k] |
59 |
| - |
60 | 17 | def test_to_dict_timestamp(self):
|
61 | 18 |
|
62 | 19 | # GH11247
|
@@ -190,17 +147,85 @@ def test_to_records_with_unicode_column_names(self):
|
190 | 147 | )
|
191 | 148 | tm.assert_almost_equal(result, expected)
|
192 | 149 |
|
| 150 | + @pytest.mark.parametrize('mapping', [ |
| 151 | + dict, |
| 152 | + collections.defaultdict(list), |
| 153 | + collections.OrderedDict]) |
| 154 | + def test_to_dict(self, mapping): |
| 155 | + test_data = { |
| 156 | + 'A': {'1': 1, '2': 2}, |
| 157 | + 'B': {'1': '1', '2': '2', '3': '3'}, |
| 158 | + } |
| 159 | + |
| 160 | + # GH16122 |
| 161 | + recons_data = DataFrame(test_data).to_dict(into=mapping) |
| 162 | + |
| 163 | + for k, v in compat.iteritems(test_data): |
| 164 | + for k2, v2 in compat.iteritems(v): |
| 165 | + assert (v2 == recons_data[k][k2]) |
| 166 | + |
| 167 | + recons_data = DataFrame(test_data).to_dict("l", mapping) |
| 168 | + |
| 169 | + for k, v in compat.iteritems(test_data): |
| 170 | + for k2, v2 in compat.iteritems(v): |
| 171 | + assert (v2 == recons_data[k][int(k2) - 1]) |
| 172 | + |
| 173 | + recons_data = DataFrame(test_data).to_dict("s", mapping) |
| 174 | + |
| 175 | + for k, v in compat.iteritems(test_data): |
| 176 | + for k2, v2 in compat.iteritems(v): |
| 177 | + assert (v2 == recons_data[k][k2]) |
| 178 | + |
| 179 | + recons_data = DataFrame(test_data).to_dict("sp", mapping) |
| 180 | + expected_split = {'columns': ['A', 'B'], 'index': ['1', '2', '3'], |
| 181 | + 'data': [[1.0, '1'], [2.0, '2'], [np.nan, '3']]} |
| 182 | + tm.assert_dict_equal(recons_data, expected_split) |
| 183 | + |
| 184 | + recons_data = DataFrame(test_data).to_dict("r", mapping) |
| 185 | + expected_records = [{'A': 1.0, 'B': '1'}, |
| 186 | + {'A': 2.0, 'B': '2'}, |
| 187 | + {'A': np.nan, 'B': '3'}] |
| 188 | + assert isinstance(recons_data, list) |
| 189 | + assert (len(recons_data) == 3) |
| 190 | + for l, r in zip(recons_data, expected_records): |
| 191 | + tm.assert_dict_equal(l, r) |
| 192 | + |
| 193 | + # GH10844 |
| 194 | + recons_data = DataFrame(test_data).to_dict("i") |
| 195 | + |
| 196 | + for k, v in compat.iteritems(test_data): |
| 197 | + for k2, v2 in compat.iteritems(v): |
| 198 | + assert (v2 == recons_data[k2][k]) |
| 199 | + |
| 200 | + df = DataFrame(test_data) |
| 201 | + df['duped'] = df[df.columns[0]] |
| 202 | + recons_data = df.to_dict("i") |
| 203 | + comp_data = test_data.copy() |
| 204 | + comp_data['duped'] = comp_data[df.columns[0]] |
| 205 | + for k, v in compat.iteritems(comp_data): |
| 206 | + for k2, v2 in compat.iteritems(v): |
| 207 | + assert (v2 == recons_data[k2][k]) |
| 208 | + |
| 209 | + @pytest.mark.parametrize('mapping', [ |
| 210 | + list, |
| 211 | + collections.defaultdict, |
| 212 | + []]) |
| 213 | + def test_to_dict_errors(self, mapping): |
| 214 | + # GH16122 |
| 215 | + df = DataFrame(np.random.randn(3, 3)) |
| 216 | + with pytest.raises(TypeError): |
| 217 | + df.to_dict(into=mapping) |
193 | 218 |
|
194 |
| -@pytest.mark.parametrize('tz', ['UTC', 'GMT', 'US/Eastern']) |
195 |
| -def test_to_records_datetimeindex_with_tz(tz): |
196 |
| - # GH13937 |
197 |
| - dr = date_range('2016-01-01', periods=10, |
198 |
| - freq='S', tz=tz) |
| 219 | + @pytest.mark.parametrize('tz', ['UTC', 'GMT', 'US/Eastern']) |
| 220 | + def test_to_records_datetimeindex_with_tz(self, tz): |
| 221 | + # GH13937 |
| 222 | + dr = date_range('2016-01-01', periods=10, |
| 223 | + freq='S', tz=tz) |
199 | 224 |
|
200 |
| - df = DataFrame({'datetime': dr}, index=dr) |
| 225 | + df = DataFrame({'datetime': dr}, index=dr) |
201 | 226 |
|
202 |
| - expected = df.to_records() |
203 |
| - result = df.tz_convert("UTC").to_records() |
| 227 | + expected = df.to_records() |
| 228 | + result = df.tz_convert("UTC").to_records() |
204 | 229 |
|
205 |
| - # both converted to UTC, so they are equal |
206 |
| - tm.assert_numpy_array_equal(result, expected) |
| 230 | + # both converted to UTC, so they are equal |
| 231 | + tm.assert_numpy_array_equal(result, expected) |
0 commit comments