Skip to content

Commit 65c1044

Browse files
authored
TST: implement test_getitem for Series (#33353)
1 parent 1e245f1 commit 65c1044

File tree

8 files changed

+114
-101
lines changed

8 files changed

+114
-101
lines changed

pandas/tests/frame/methods/test_duplicated.py

+13-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import numpy as np
44
import pytest
55

6-
from pandas import DataFrame, Series
6+
from pandas import DataFrame, Series, date_range
77
import pandas._testing as tm
88

99

@@ -95,3 +95,15 @@ def test_duplicated_on_empty_frame():
9595
result = df[dupes]
9696
expected = df.copy()
9797
tm.assert_frame_equal(result, expected)
98+
99+
100+
def test_frame_datetime64_duplicated():
101+
dates = date_range("2010-07-01", end="2010-08-05")
102+
103+
tst = DataFrame({"symbol": "AAA", "date": dates})
104+
result = tst.duplicated(["date", "symbol"])
105+
assert (-result).all()
106+
107+
tst = DataFrame({"date": dates})
108+
result = tst.duplicated()
109+
assert (-result).all()

pandas/tests/series/indexing/test_datetime.py

-26
Original file line numberDiff line numberDiff line change
@@ -130,18 +130,6 @@ def test_slicing_datetimes():
130130
tm.assert_frame_equal(result, expected)
131131

132132

133-
def test_frame_datetime64_duplicated():
134-
dates = date_range("2010-07-01", end="2010-08-05")
135-
136-
tst = DataFrame({"symbol": "AAA", "date": dates})
137-
result = tst.duplicated(["date", "symbol"])
138-
assert (-result).all()
139-
140-
tst = DataFrame({"date": dates})
141-
result = tst.duplicated()
142-
assert (-result).all()
143-
144-
145133
def test_getitem_setitem_datetime_tz_pytz():
146134
from pytz import timezone as tz
147135

@@ -353,20 +341,6 @@ def test_getitem_setitem_periodindex():
353341
tm.assert_series_equal(result, ts)
354342

355343

356-
# FutureWarning from NumPy.
357-
@pytest.mark.filterwarnings("ignore:Using a non-tuple:FutureWarning")
358-
def test_getitem_median_slice_bug():
359-
index = date_range("20090415", "20090519", freq="2B")
360-
s = Series(np.random.randn(13), index=index)
361-
362-
indexer = [slice(6, 7, None)]
363-
with tm.assert_produces_warning(FutureWarning):
364-
# GH#31299
365-
result = s[indexer]
366-
expected = s[indexer[0]]
367-
tm.assert_series_equal(result, expected)
368-
369-
370344
def test_datetime_indexing():
371345

372346
index = date_range("1/1/2000", "1/7/2000")
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
"""
2+
Series.__getitem__ test classes are organized by the type of key passed.
3+
"""
4+
from datetime import datetime
5+
6+
import numpy as np
7+
import pytest
8+
9+
from pandas._libs.tslibs import conversion, timezones
10+
11+
import pandas as pd
12+
from pandas import Series, Timestamp, date_range, period_range
13+
import pandas._testing as tm
14+
15+
16+
class TestSeriesGetitemScalars:
17+
18+
# TODO: better name/GH ref?
19+
def test_getitem_regression(self):
20+
ser = Series(range(5), index=list(range(5)))
21+
result = ser[list(range(5))]
22+
tm.assert_series_equal(result, ser)
23+
24+
# ------------------------------------------------------------------
25+
# Series with DatetimeIndex
26+
27+
@pytest.mark.parametrize("tzstr", ["Europe/Berlin", "dateutil/Europe/Berlin"])
28+
def test_getitem_pydatetime_tz(self, tzstr):
29+
tz = timezones.maybe_get_tz(tzstr)
30+
31+
index = date_range(
32+
start="2012-12-24 16:00", end="2012-12-24 18:00", freq="H", tz=tzstr
33+
)
34+
ts = Series(index=index, data=index.hour)
35+
time_pandas = Timestamp("2012-12-24 17:00", tz=tzstr)
36+
37+
dt = datetime(2012, 12, 24, 17, 0)
38+
time_datetime = conversion.localize_pydatetime(dt, tz)
39+
assert ts[time_pandas] == ts[time_datetime]
40+
41+
@pytest.mark.parametrize("tz", ["US/Eastern", "dateutil/US/Eastern"])
42+
def test_string_index_alias_tz_aware(self, tz):
43+
rng = date_range("1/1/2000", periods=10, tz=tz)
44+
ser = Series(np.random.randn(len(rng)), index=rng)
45+
46+
result = ser["1/3/2000"]
47+
tm.assert_almost_equal(result, ser[2])
48+
49+
50+
class TestSeriesGetitemSlices:
51+
def test_getitem_slice_2d(self, datetime_series):
52+
# GH#30588 multi-dimensional indexing deprecated
53+
54+
# This is currently failing because the test was relying on
55+
# the DeprecationWarning coming through Index.__getitem__.
56+
# We want to implement a warning specifically for Series.__getitem__
57+
# at which point this will become a Deprecation/FutureWarning
58+
with tm.assert_produces_warning(None):
59+
# GH#30867 Don't want to support this long-term, but
60+
# for now ensure that the warning from Index
61+
# doesn't comes through via Series.__getitem__.
62+
result = datetime_series[:, np.newaxis]
63+
expected = datetime_series.values[:, np.newaxis]
64+
tm.assert_almost_equal(result, expected)
65+
66+
# FutureWarning from NumPy.
67+
@pytest.mark.filterwarnings("ignore:Using a non-tuple:FutureWarning")
68+
def test_getitem_median_slice_bug(self):
69+
index = date_range("20090415", "20090519", freq="2B")
70+
s = Series(np.random.randn(13), index=index)
71+
72+
indexer = [slice(6, 7, None)]
73+
with tm.assert_produces_warning(FutureWarning):
74+
# GH#31299
75+
result = s[indexer]
76+
expected = s[indexer[0]]
77+
tm.assert_series_equal(result, expected)
78+
79+
80+
class TestSeriesGetitemListLike:
81+
def test_getitem_intlist_intindex_periodvalues(self):
82+
ser = Series(period_range("2000-01-01", periods=10, freq="D"))
83+
84+
result = ser[[2, 4]]
85+
exp = pd.Series(
86+
[pd.Period("2000-01-03", freq="D"), pd.Period("2000-01-05", freq="D")],
87+
index=[2, 4],
88+
dtype="Period[D]",
89+
)
90+
tm.assert_series_equal(result, exp)
91+
assert result.dtype == "Period[D]"
92+
93+
94+
def test_getitem_generator(string_series):
95+
gen = (x > 0 for x in string_series)
96+
result = string_series[gen]
97+
result2 = string_series[iter(string_series > 0)]
98+
expected = string_series[string_series > 0]
99+
tm.assert_series_equal(result, expected)
100+
tm.assert_series_equal(result2, expected)

pandas/tests/series/indexing/test_indexing.py

-19
Original file line numberDiff line numberDiff line change
@@ -119,15 +119,6 @@ def test_getitem_fancy(string_series, object_series):
119119
assert object_series[2] == slice2[1]
120120

121121

122-
def test_getitem_generator(string_series):
123-
gen = (x > 0 for x in string_series)
124-
result = string_series[gen]
125-
result2 = string_series[iter(string_series > 0)]
126-
expected = string_series[string_series > 0]
127-
tm.assert_series_equal(result, expected)
128-
tm.assert_series_equal(result2, expected)
129-
130-
131122
def test_type_promotion():
132123
# GH12599
133124
s = pd.Series(dtype=object)
@@ -872,16 +863,6 @@ def test_uint_drop(any_int_dtype):
872863
tm.assert_series_equal(series, expected)
873864

874865

875-
def test_getitem_2d_no_warning():
876-
# https://github.com/pandas-dev/pandas/issues/30867
877-
# Don't want to support this long-term, but
878-
# for now ensure that the warning from Index
879-
# doesn't comes through via Series.__getitem__.
880-
series = pd.Series([1, 2, 3], index=[1, 2, 3])
881-
with tm.assert_produces_warning(None):
882-
series[:, None]
883-
884-
885866
def test_getitem_unrecognized_scalar():
886867
# GH#32684 a scalar key that is not recognized by lib.is_scalar
887868

pandas/tests/series/indexing/test_numeric.py

-6
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,6 @@ def test_getitem_negative_out_of_bounds():
4040
s[-11] = "foo"
4141

4242

43-
def test_getitem_regression():
44-
s = Series(range(5), index=list(range(5)))
45-
result = s[list(range(5))]
46-
tm.assert_series_equal(result, s)
47-
48-
4943
def test_getitem_setitem_slice_bug():
5044
s = Series(range(10), index=list(range(10)))
5145
result = s[-12:]

pandas/tests/series/test_period.py

-12
Original file line numberDiff line numberDiff line change
@@ -20,18 +20,6 @@ def test_auto_conversion(self):
2020
)
2121
assert series.dtype == "Period[D]"
2222

23-
def test_getitem(self):
24-
assert self.series[1] == pd.Period("2000-01-02", freq="D")
25-
26-
result = self.series[[2, 4]]
27-
exp = pd.Series(
28-
[pd.Period("2000-01-03", freq="D"), pd.Period("2000-01-05", freq="D")],
29-
index=[2, 4],
30-
dtype="Period[D]",
31-
)
32-
tm.assert_series_equal(result, exp)
33-
assert result.dtype == "Period[D]"
34-
3523
def test_isna(self):
3624
# GH 13737
3725
s = Series([pd.Period("2011-01", freq="M"), pd.Period("NaT", freq="M")])

pandas/tests/series/test_timeseries.py

-12
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,6 @@
77

88

99
class TestTimeSeries:
10-
def test_mpl_compat_hack(self, datetime_series):
11-
12-
# This is currently failing because the test was relying on
13-
# the DeprecationWarning coming through Index.__getitem__.
14-
# We want to implement a warning specifically for Series.__getitem__
15-
# at which point this will become a Deprecation/FutureWarning
16-
with tm.assert_produces_warning(None):
17-
# GH#30588 multi-dimensional indexing deprecated
18-
result = datetime_series[:, np.newaxis]
19-
expected = datetime_series.values[:, np.newaxis]
20-
tm.assert_almost_equal(result, expected)
21-
2210
def test_timeseries_coercion(self):
2311
idx = tm.makeDateIndex(10000)
2412
ser = Series(np.random.randn(len(idx)), idx.astype(object))

pandas/tests/series/test_timezones.py

+1-25
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,7 @@
77
import numpy as np
88
import pytest
99

10-
from pandas._libs.tslibs import conversion, timezones
11-
12-
from pandas import Series, Timestamp
10+
from pandas import Series
1311
import pandas._testing as tm
1412
from pandas.core.indexes.datetimes import date_range
1513

@@ -29,28 +27,6 @@ def test_dateutil_tzoffset_support(self):
2927
# it works! #2443
3028
repr(series.index[0])
3129

32-
@pytest.mark.parametrize("tz", ["US/Eastern", "dateutil/US/Eastern"])
33-
def test_string_index_alias_tz_aware(self, tz):
34-
rng = date_range("1/1/2000", periods=10, tz=tz)
35-
ser = Series(np.random.randn(len(rng)), index=rng)
36-
37-
result = ser["1/3/2000"]
38-
tm.assert_almost_equal(result, ser[2])
39-
40-
@pytest.mark.parametrize("tzstr", ["Europe/Berlin", "dateutil/Europe/Berlin"])
41-
def test_getitem_pydatetime_tz(self, tzstr):
42-
tz = timezones.maybe_get_tz(tzstr)
43-
44-
index = date_range(
45-
start="2012-12-24 16:00", end="2012-12-24 18:00", freq="H", tz=tzstr
46-
)
47-
ts = Series(index=index, data=index.hour)
48-
time_pandas = Timestamp("2012-12-24 17:00", tz=tzstr)
49-
50-
dt = datetime(2012, 12, 24, 17, 0)
51-
time_datetime = conversion.localize_pydatetime(dt, tz)
52-
assert ts[time_pandas] == ts[time_datetime]
53-
5430
@pytest.mark.parametrize("copy", [True, False])
5531
@pytest.mark.parametrize(
5632
"method, tz", [["tz_localize", None], ["tz_convert", "Europe/Berlin"]]

0 commit comments

Comments
 (0)