Skip to content

Commit 9270224

Browse files
committed
TST: Move some Series ctor tests to SharedWithSparse
1 parent 4efe656 commit 9270224

File tree

3 files changed

+97
-63
lines changed

3 files changed

+97
-63
lines changed

pandas/tests/series/test_api.py

Lines changed: 78 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
# coding=utf-8
22
# pylint: disable-msg=E1101,W0612
3+
from collections import OrderedDict
34

45
import pytest
56

67
import numpy as np
78
import pandas as pd
89

9-
from pandas import Index, Series, DataFrame, date_range
10+
from pandas import Index, Series, SparseSeries, DataFrame, date_range
1011
from pandas.core.indexes.datetimes import Timestamp
1112

1213
from pandas.compat import range
@@ -21,6 +22,12 @@
2122

2223
class SharedWithSparse(object):
2324

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+
2431
def test_scalarop_preserve_name(self):
2532
result = self.ts * 2
2633
assert result.name == self.ts.name
@@ -117,9 +124,79 @@ def test_to_sparse_pass_name(self):
117124
result = self.ts.to_sparse()
118125
assert result.name == self.ts.name
119126

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],
135+
index=['b', 'c', 'd', 'a'])
136+
self._assert_series_equal(result, expected)
137+
138+
def test_constructor_subclass_dict(self):
139+
data = tm.TestSubDict((x, 10.0 * x) for x in range(10))
140+
series = self.series_klass(data)
141+
expected = self.series_klass(dict(compat.iteritems(data)))
142+
self._assert_series_equal(series, expected)
143+
144+
def test_constructor_ordereddict(self):
145+
# GH3283
146+
data = OrderedDict(
147+
('col%s' % i, np.random.random()) for i in range(12))
148+
149+
series = self.series_klass(data)
150+
expected = self.series_klass(list(data.values()), list(data.keys()))
151+
self._assert_series_equal(series, expected)
152+
153+
# Test with subclass
154+
class A(OrderedDict):
155+
pass
156+
157+
series = self.series_klass(A(data))
158+
self._assert_series_equal(series, expected)
159+
160+
def test_constructor_dict_multiindex(self):
161+
d = {('a', 'a'): 0., ('b', 'a'): 1., ('b', 'c'): 2.}
162+
_d = sorted(d.items())
163+
result = self.series_klass(d)
164+
expected = self.series_klass(
165+
[x[1] for x in _d],
166+
index=pd.MultiIndex.from_tuples([x[0] for x in _d]))
167+
self._assert_series_equal(result, expected)
168+
169+
d['z'] = 111.
170+
_d.insert(0, ('z', d['z']))
171+
result = self.series_klass(d)
172+
expected = self.series_klass([x[1] for x in _d],
173+
index=pd.Index([x[0] for x in _d],
174+
tupleize_cols=False))
175+
result = result.reindex(index=expected.index)
176+
self._assert_series_equal(result, expected)
177+
178+
def test_constructor_dict_timedelta_index(self):
179+
# GH #12169 : Resample category data with timedelta index
180+
# construct Series from dict as data and TimedeltaIndex as index
181+
# will result NaN in result Series data
182+
expected = self.series_klass(
183+
data=['A', 'B', 'C'],
184+
index=pd.to_timedelta([0, 10, 20], unit='s')
185+
)
186+
187+
result = self.series_klass(
188+
data={pd.to_timedelta(0, unit='s'): 'A',
189+
pd.to_timedelta(10, unit='s'): 'B',
190+
pd.to_timedelta(20, unit='s'): 'C'},
191+
index=pd.to_timedelta([0, 10, 20], unit='s')
192+
)
193+
self._assert_series_equal(result, expected)
194+
120195

121196
class TestSeriesMisc(TestData, SharedWithSparse):
122197

198+
series_klass = Series
199+
123200
def test_tab_completion(self):
124201
# GH 9910
125202
s = Series(list('abcd'))

pandas/tests/series/test_constructors.py

Lines changed: 0 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -605,48 +605,6 @@ def test_constructor_dict(self):
605605
expected.iloc[1] = 1
606606
assert_series_equal(result, expected)
607607

608-
def test_constructor_dict_multiindex(self):
609-
check = lambda result, expected: tm.assert_series_equal(
610-
result, expected, check_dtype=True, check_series_type=True)
611-
d = {('a', 'a'): 0., ('b', 'a'): 1., ('b', 'c'): 2.}
612-
_d = sorted(d.items())
613-
ser = Series(d)
614-
expected = Series([x[1] for x in _d],
615-
index=MultiIndex.from_tuples([x[0] for x in _d]))
616-
check(ser, expected)
617-
618-
d['z'] = 111.
619-
_d.insert(0, ('z', d['z']))
620-
ser = Series(d)
621-
expected = Series([x[1] for x in _d], index=Index(
622-
[x[0] for x in _d], tupleize_cols=False))
623-
ser = ser.reindex(index=expected.index)
624-
check(ser, expected)
625-
626-
def test_constructor_dict_timedelta_index(self):
627-
# GH #12169 : Resample category data with timedelta index
628-
# construct Series from dict as data and TimedeltaIndex as index
629-
# will result NaN in result Series data
630-
expected = Series(
631-
data=['A', 'B', 'C'],
632-
index=pd.to_timedelta([0, 10, 20], unit='s')
633-
)
634-
635-
result = Series(
636-
data={pd.to_timedelta(0, unit='s'): 'A',
637-
pd.to_timedelta(10, unit='s'): 'B',
638-
pd.to_timedelta(20, unit='s'): 'C'},
639-
index=pd.to_timedelta([0, 10, 20], unit='s')
640-
)
641-
# this should work
642-
assert_series_equal(result, expected)
643-
644-
def test_constructor_subclass_dict(self):
645-
data = tm.TestSubDict((x, 10.0 * x) for x in range(10))
646-
series = Series(data)
647-
refseries = Series(dict(compat.iteritems(data)))
648-
assert_series_equal(refseries, series)
649-
650608
def test_constructor_dict_datetime64_index(self):
651609
# GH 9456
652610

@@ -670,26 +628,6 @@ def create_data(constructor):
670628
assert_series_equal(result_datetime, expected)
671629
assert_series_equal(result_Timestamp, expected)
672630

673-
def test_orderedDict_ctor(self):
674-
# GH3283
675-
import pandas
676-
import random
677-
data = OrderedDict([('col%s' % i, random.random()) for i in range(12)])
678-
s = pandas.Series(data)
679-
assert all(s.values == list(data.values()))
680-
681-
def test_orderedDict_subclass_ctor(self):
682-
# GH3283
683-
import pandas
684-
import random
685-
686-
class A(OrderedDict):
687-
pass
688-
689-
data = A([('col%s' % i, random.random()) for i in range(12)])
690-
s = pandas.Series(data)
691-
assert all(s.values == list(data.values()))
692-
693631
def test_constructor_list_of_tuples(self):
694632
data = [(1, 1), (2, 2), (2, 3)]
695633
s = Series(data)

pandas/tests/sparse/test_series.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
# pylint: disable-msg=E1101,W0612
22

33
import operator
4+
from datetime import datetime
5+
46
import pytest
57

68
from numpy import nan
@@ -58,6 +60,8 @@ def _test_data2_zero():
5860

5961
class TestSparseSeries(SharedWithSparse):
6062

63+
series_klass = SparseSeries
64+
6165
def setup_method(self, method):
6266
arr, index = _test_data1()
6367

@@ -1379,3 +1383,18 @@ def test_numpy_func_call(self):
13791383
for func in funcs:
13801384
for series in ('bseries', 'zbseries'):
13811385
getattr(np, func)(getattr(self, series))
1386+
1387+
1388+
@pytest.mark.parametrize(
1389+
'datetime_type', (np.datetime64,
1390+
pd.Timestamp,
1391+
lambda x: datetime.strptime(x, '%Y-%m-%d')))
1392+
def test_constructor_dict_datetime64_index(datetime_type):
1393+
# GH 9456
1394+
dates = ['1984-02-19', '1988-11-06', '1989-12-03', '1990-03-15']
1395+
values = [42544017.198965244, 1234565, 40512335.181958228, -1]
1396+
1397+
result = SparseSeries(dict(zip(map(datetime_type, dates), values)))
1398+
expected = SparseSeries(values, map(pd.Timestamp, dates))
1399+
1400+
tm.assert_sp_series_equal(result, expected)

0 commit comments

Comments
 (0)