|
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 |
|
6 | 7 | import numpy as np
|
7 | 8 | import pandas as pd
|
8 | 9 |
|
9 |
| -from pandas import Index, Series, DataFrame, date_range |
| 10 | +from pandas import Index, Series, SparseSeries, DataFrame, date_range |
10 | 11 | from pandas.core.indexes.datetimes import Timestamp
|
11 | 12 |
|
12 | 13 | from pandas.compat import range
|
|
21 | 22 |
|
22 | 23 | class SharedWithSparse(object):
|
23 | 24 |
|
| 25 | + def _assert_series_equal(self, left, right): |
| 26 | + """Helper dispatching to series class dependent assertion""" |
| 27 | + if isinstance(left, SparseSeries) or isinstance(right, SparseSeries): |
| 28 | + return tm.assert_sp_series_equal(left, right) |
| 29 | + return tm.assert_series_equal(left, right) |
| 30 | + |
24 | 31 | def test_scalarop_preserve_name(self):
|
25 | 32 | result = self.ts * 2
|
26 | 33 | assert result.name == self.ts.name
|
@@ -117,9 +124,78 @@ def test_to_sparse_pass_name(self):
|
117 | 124 | result = self.ts.to_sparse()
|
118 | 125 | assert result.name == self.ts.name
|
119 | 126 |
|
| 127 | + def test_constructor_dict(self): |
| 128 | + d = {'a': 0., 'b': 1., 'c': 2.} |
| 129 | + result = self.series_klass(d) |
| 130 | + expected = self.series_klass(d, index=sorted(d.keys())) |
| 131 | + self._assert_series_equal(result, expected) |
| 132 | + |
| 133 | + result = self.series_klass(d, index=['b', 'c', 'd', 'a']) |
| 134 | + expected = self.series_klass([1, 2, np.nan, 0], index=['b', 'c', 'd', 'a']) |
| 135 | + self._assert_series_equal(result, expected) |
| 136 | + |
| 137 | + def test_constructor_subclass_dict(self): |
| 138 | + data = tm.TestSubDict((x, 10.0 * x) for x in range(10)) |
| 139 | + series = self.series_klass(data) |
| 140 | + expected = self.series_klass(dict(compat.iteritems(data))) |
| 141 | + self._assert_series_equal(series, expected) |
| 142 | + |
| 143 | + def test_constructor_ordereddict(self): |
| 144 | + # GH3283 |
| 145 | + data = OrderedDict( |
| 146 | + ('col%s' % i, np.random.random()) for i in range(12)) |
| 147 | + |
| 148 | + series = self.series_klass(data) |
| 149 | + expected = self.series_klass(list(data.values()), list(data.keys())) |
| 150 | + self._assert_series_equal(series, expected) |
| 151 | + |
| 152 | + # Test with subclass |
| 153 | + class A(OrderedDict): |
| 154 | + pass |
| 155 | + |
| 156 | + series = self.series_klass(A(data)) |
| 157 | + self._assert_series_equal(series, expected) |
| 158 | + |
| 159 | + def test_constructor_dict_multiindex(self): |
| 160 | + d = {('a', 'a'): 0., ('b', 'a'): 1., ('b', 'c'): 2.} |
| 161 | + _d = sorted(d.items()) |
| 162 | + result = self.series_klass(d) |
| 163 | + expected = self.series_klass( |
| 164 | + [x[1] for x in _d], |
| 165 | + index=pd.MultiIndex.from_tuples([x[0] for x in _d])) |
| 166 | + self._assert_series_equal(result, expected) |
| 167 | + |
| 168 | + d['z'] = 111. |
| 169 | + _d.insert(0, ('z', d['z'])) |
| 170 | + result = self.series_klass(d) |
| 171 | + expected = self.series_klass([x[1] for x in _d], |
| 172 | + index=pd.Index([x[0] for x in _d], |
| 173 | + tupleize_cols=False)) |
| 174 | + result = result.reindex(index=expected.index) |
| 175 | + self._assert_series_equal(result, expected) |
| 176 | + |
| 177 | + def test_constructor_dict_timedelta_index(self): |
| 178 | + # GH #12169 : Resample category data with timedelta index |
| 179 | + # construct Series from dict as data and TimedeltaIndex as index |
| 180 | + # will result NaN in result Series data |
| 181 | + expected = self.series_klass( |
| 182 | + data=['A', 'B', 'C'], |
| 183 | + index=pd.to_timedelta([0, 10, 20], unit='s') |
| 184 | + ) |
| 185 | + |
| 186 | + result = self.series_klass( |
| 187 | + data={pd.to_timedelta(0, unit='s'): 'A', |
| 188 | + pd.to_timedelta(10, unit='s'): 'B', |
| 189 | + pd.to_timedelta(20, unit='s'): 'C'}, |
| 190 | + index=pd.to_timedelta([0, 10, 20], unit='s') |
| 191 | + ) |
| 192 | + self._assert_series_equal(result, expected) |
| 193 | + |
120 | 194 |
|
121 | 195 | class TestSeriesMisc(TestData, SharedWithSparse):
|
122 | 196 |
|
| 197 | + series_klass = Series |
| 198 | + |
123 | 199 | def test_tab_completion(self):
|
124 | 200 | # GH 9910
|
125 | 201 | s = Series(list('abcd'))
|
|
0 commit comments