|
1 | 1 | # coding=utf-8
|
2 | 2 | # pylint: disable-msg=E1101,W0612
|
| 3 | +from collections import OrderedDict |
3 | 4 |
|
4 | 5 | import pytest
|
5 | 6 |
|
|
20 | 21 |
|
21 | 22 |
|
22 | 23 | class SharedWithSparse(object):
|
| 24 | + """ |
| 25 | + A collection of tests Series and SparseSeries can share. |
| 26 | +
|
| 27 | + In generic tests on this class, use ``self._assert_series_equal()`` |
| 28 | + which is implemented in sub-classes. |
| 29 | + """ |
| 30 | + def _assert_series_equal(self, left, right): |
| 31 | + """Dispatch to series class dependent assertion""" |
| 32 | + raise NotImplementedError |
23 | 33 |
|
24 | 34 | def test_scalarop_preserve_name(self):
|
25 | 35 | result = self.ts * 2
|
@@ -117,9 +127,81 @@ def test_to_sparse_pass_name(self):
|
117 | 127 | result = self.ts.to_sparse()
|
118 | 128 | assert result.name == self.ts.name
|
119 | 129 |
|
| 130 | + def test_constructor_dict(self): |
| 131 | + d = {'a': 0., 'b': 1., 'c': 2.} |
| 132 | + result = self.series_klass(d) |
| 133 | + expected = self.series_klass(d, index=sorted(d.keys())) |
| 134 | + self._assert_series_equal(result, expected) |
| 135 | + |
| 136 | + result = self.series_klass(d, index=['b', 'c', 'd', 'a']) |
| 137 | + expected = self.series_klass([1, 2, np.nan, 0], |
| 138 | + index=['b', 'c', 'd', 'a']) |
| 139 | + self._assert_series_equal(result, expected) |
| 140 | + |
| 141 | + def test_constructor_subclass_dict(self): |
| 142 | + data = tm.TestSubDict((x, 10.0 * x) for x in range(10)) |
| 143 | + series = self.series_klass(data) |
| 144 | + expected = self.series_klass(dict(compat.iteritems(data))) |
| 145 | + self._assert_series_equal(series, expected) |
| 146 | + |
| 147 | + def test_constructor_ordereddict(self): |
| 148 | + # GH3283 |
| 149 | + data = OrderedDict( |
| 150 | + ('col%s' % i, np.random.random()) for i in range(12)) |
| 151 | + |
| 152 | + series = self.series_klass(data) |
| 153 | + expected = self.series_klass(list(data.values()), list(data.keys())) |
| 154 | + self._assert_series_equal(series, expected) |
| 155 | + |
| 156 | + # Test with subclass |
| 157 | + class A(OrderedDict): |
| 158 | + pass |
| 159 | + |
| 160 | + series = self.series_klass(A(data)) |
| 161 | + self._assert_series_equal(series, expected) |
| 162 | + |
| 163 | + def test_constructor_dict_multiindex(self): |
| 164 | + d = {('a', 'a'): 0., ('b', 'a'): 1., ('b', 'c'): 2.} |
| 165 | + _d = sorted(d.items()) |
| 166 | + result = self.series_klass(d) |
| 167 | + expected = self.series_klass( |
| 168 | + [x[1] for x in _d], |
| 169 | + index=pd.MultiIndex.from_tuples([x[0] for x in _d])) |
| 170 | + self._assert_series_equal(result, expected) |
| 171 | + |
| 172 | + d['z'] = 111. |
| 173 | + _d.insert(0, ('z', d['z'])) |
| 174 | + result = self.series_klass(d) |
| 175 | + expected = self.series_klass([x[1] for x in _d], |
| 176 | + index=pd.Index([x[0] for x in _d], |
| 177 | + tupleize_cols=False)) |
| 178 | + result = result.reindex(index=expected.index) |
| 179 | + self._assert_series_equal(result, expected) |
| 180 | + |
| 181 | + def test_constructor_dict_timedelta_index(self): |
| 182 | + # GH #12169 : Resample category data with timedelta index |
| 183 | + # construct Series from dict as data and TimedeltaIndex as index |
| 184 | + # will result NaN in result Series data |
| 185 | + expected = self.series_klass( |
| 186 | + data=['A', 'B', 'C'], |
| 187 | + index=pd.to_timedelta([0, 10, 20], unit='s') |
| 188 | + ) |
| 189 | + |
| 190 | + result = self.series_klass( |
| 191 | + data={pd.to_timedelta(0, unit='s'): 'A', |
| 192 | + pd.to_timedelta(10, unit='s'): 'B', |
| 193 | + pd.to_timedelta(20, unit='s'): 'C'}, |
| 194 | + index=pd.to_timedelta([0, 10, 20], unit='s') |
| 195 | + ) |
| 196 | + self._assert_series_equal(result, expected) |
| 197 | + |
120 | 198 |
|
121 | 199 | class TestSeriesMisc(TestData, SharedWithSparse):
|
122 | 200 |
|
| 201 | + series_klass = Series |
| 202 | + # SharedWithSparse tests use generic, series_klass-agnostic assertion |
| 203 | + _assert_series_equal = staticmethod(tm.assert_series_equal) |
| 204 | + |
123 | 205 | def test_tab_completion(self):
|
124 | 206 | # GH 9910
|
125 | 207 | s = Series(list('abcd'))
|
|
0 commit comments