Skip to content

Commit c863dde

Browse files
authored
TST/REF: collect tests by method, some misplaced (#37354)
1 parent 7dcaaf4 commit c863dde

12 files changed

+441
-421
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import numpy as np
2+
3+
from pandas import Categorical, Series
4+
import pandas._testing as tm
5+
6+
7+
class TestCategoricalComparisons:
8+
def test_categorical_nan_equality(self):
9+
cat = Series(Categorical(["a", "b", "c", np.nan]))
10+
expected = Series([True, True, True, False])
11+
result = cat == cat
12+
tm.assert_series_equal(result, expected)

pandas/tests/frame/methods/test_asfreq.py

+19-1
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,31 @@
22

33
import numpy as np
44

5-
from pandas import DataFrame, DatetimeIndex, Series, date_range
5+
from pandas import DataFrame, DatetimeIndex, Series, date_range, to_datetime
66
import pandas._testing as tm
77

88
from pandas.tseries import offsets
99

1010

1111
class TestAsFreq:
12+
def test_asfreq_resample_set_correct_freq(self):
13+
# GH#5613
14+
# we test if .asfreq() and .resample() set the correct value for .freq
15+
df = DataFrame(
16+
{"date": ["2012-01-01", "2012-01-02", "2012-01-03"], "col": [1, 2, 3]}
17+
)
18+
df = df.set_index(to_datetime(df.date))
19+
20+
# testing the settings before calling .asfreq() and .resample()
21+
assert df.index.freq is None
22+
assert df.index.inferred_freq == "D"
23+
24+
# does .asfreq() set .freq correctly?
25+
assert df.asfreq("D").index.freq == "D"
26+
27+
# does .resample() set .freq correctly?
28+
assert df.resample("D").asfreq().index.freq == "D"
29+
1230
def test_asfreq(self, datetime_frame):
1331
offset_monthly = datetime_frame.asfreq(offsets.BMonthEnd())
1432
rule_monthly = datetime_frame.asfreq("BM")

pandas/tests/indexes/datetimes/test_indexing.py

+10
Original file line numberDiff line numberDiff line change
@@ -618,6 +618,16 @@ def test_get_indexer_out_of_bounds_date(self, target, positions):
618618
expected = np.array(positions, dtype=np.intp)
619619
tm.assert_numpy_array_equal(result, expected)
620620

621+
def test_get_indexer_pad_requires_monotonicity(self):
622+
rng = date_range("1/1/2000", "3/1/2000", freq="B")
623+
624+
# neither monotonic increasing or decreasing
625+
rng2 = rng[[1, 0, 2]]
626+
627+
msg = "index must be monotonic increasing or decreasing"
628+
with pytest.raises(ValueError, match=msg):
629+
rng2.get_indexer(rng, method="pad")
630+
621631

622632
class TestMaybeCastSliceBound:
623633
def test_maybe_cast_slice_bounds_empty(self):
+203
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,203 @@
1+
from datetime import datetime
2+
3+
import numpy as np
4+
import pytest
5+
6+
from pandas import NaT, Series, Timestamp
7+
import pandas._testing as tm
8+
9+
10+
class TestConvert:
11+
def test_convert(self):
12+
# GH#10265
13+
# Tests: All to nans, coerce, true
14+
# Test coercion returns correct type
15+
ser = Series(["a", "b", "c"])
16+
results = ser._convert(datetime=True, coerce=True)
17+
expected = Series([NaT] * 3)
18+
tm.assert_series_equal(results, expected)
19+
20+
results = ser._convert(numeric=True, coerce=True)
21+
expected = Series([np.nan] * 3)
22+
tm.assert_series_equal(results, expected)
23+
24+
expected = Series([NaT] * 3, dtype=np.dtype("m8[ns]"))
25+
results = ser._convert(timedelta=True, coerce=True)
26+
tm.assert_series_equal(results, expected)
27+
28+
dt = datetime(2001, 1, 1, 0, 0)
29+
td = dt - datetime(2000, 1, 1, 0, 0)
30+
31+
# Test coercion with mixed types
32+
ser = Series(["a", "3.1415", dt, td])
33+
results = ser._convert(datetime=True, coerce=True)
34+
expected = Series([NaT, NaT, dt, NaT])
35+
tm.assert_series_equal(results, expected)
36+
37+
results = ser._convert(numeric=True, coerce=True)
38+
expected = Series([np.nan, 3.1415, np.nan, np.nan])
39+
tm.assert_series_equal(results, expected)
40+
41+
results = ser._convert(timedelta=True, coerce=True)
42+
expected = Series([NaT, NaT, NaT, td], dtype=np.dtype("m8[ns]"))
43+
tm.assert_series_equal(results, expected)
44+
45+
# Test standard conversion returns original
46+
results = ser._convert(datetime=True)
47+
tm.assert_series_equal(results, ser)
48+
results = ser._convert(numeric=True)
49+
expected = Series([np.nan, 3.1415, np.nan, np.nan])
50+
tm.assert_series_equal(results, expected)
51+
results = ser._convert(timedelta=True)
52+
tm.assert_series_equal(results, ser)
53+
54+
# test pass-through and non-conversion when other types selected
55+
ser = Series(["1.0", "2.0", "3.0"])
56+
results = ser._convert(datetime=True, numeric=True, timedelta=True)
57+
expected = Series([1.0, 2.0, 3.0])
58+
tm.assert_series_equal(results, expected)
59+
results = ser._convert(True, False, True)
60+
tm.assert_series_equal(results, ser)
61+
62+
ser = Series(
63+
[datetime(2001, 1, 1, 0, 0), datetime(2001, 1, 1, 0, 0)], dtype="O"
64+
)
65+
results = ser._convert(datetime=True, numeric=True, timedelta=True)
66+
expected = Series([datetime(2001, 1, 1, 0, 0), datetime(2001, 1, 1, 0, 0)])
67+
tm.assert_series_equal(results, expected)
68+
results = ser._convert(datetime=False, numeric=True, timedelta=True)
69+
tm.assert_series_equal(results, ser)
70+
71+
td = datetime(2001, 1, 1, 0, 0) - datetime(2000, 1, 1, 0, 0)
72+
ser = Series([td, td], dtype="O")
73+
results = ser._convert(datetime=True, numeric=True, timedelta=True)
74+
expected = Series([td, td])
75+
tm.assert_series_equal(results, expected)
76+
results = ser._convert(True, True, False)
77+
tm.assert_series_equal(results, ser)
78+
79+
ser = Series([1.0, 2, 3], index=["a", "b", "c"])
80+
result = ser._convert(numeric=True)
81+
tm.assert_series_equal(result, ser)
82+
83+
# force numeric conversion
84+
res = ser.copy().astype("O")
85+
res["a"] = "1"
86+
result = res._convert(numeric=True)
87+
tm.assert_series_equal(result, ser)
88+
89+
res = ser.copy().astype("O")
90+
res["a"] = "1."
91+
result = res._convert(numeric=True)
92+
tm.assert_series_equal(result, ser)
93+
94+
res = ser.copy().astype("O")
95+
res["a"] = "garbled"
96+
result = res._convert(numeric=True)
97+
expected = ser.copy()
98+
expected["a"] = np.nan
99+
tm.assert_series_equal(result, expected)
100+
101+
# GH 4119, not converting a mixed type (e.g.floats and object)
102+
ser = Series([1, "na", 3, 4])
103+
result = ser._convert(datetime=True, numeric=True)
104+
expected = Series([1, np.nan, 3, 4])
105+
tm.assert_series_equal(result, expected)
106+
107+
ser = Series([1, "", 3, 4])
108+
result = ser._convert(datetime=True, numeric=True)
109+
tm.assert_series_equal(result, expected)
110+
111+
# dates
112+
ser = Series(
113+
[
114+
datetime(2001, 1, 1, 0, 0),
115+
datetime(2001, 1, 2, 0, 0),
116+
datetime(2001, 1, 3, 0, 0),
117+
]
118+
)
119+
s2 = Series(
120+
[
121+
datetime(2001, 1, 1, 0, 0),
122+
datetime(2001, 1, 2, 0, 0),
123+
datetime(2001, 1, 3, 0, 0),
124+
"foo",
125+
1.0,
126+
1,
127+
Timestamp("20010104"),
128+
"20010105",
129+
],
130+
dtype="O",
131+
)
132+
133+
result = ser._convert(datetime=True)
134+
expected = Series(
135+
[Timestamp("20010101"), Timestamp("20010102"), Timestamp("20010103")],
136+
dtype="M8[ns]",
137+
)
138+
tm.assert_series_equal(result, expected)
139+
140+
result = ser._convert(datetime=True, coerce=True)
141+
tm.assert_series_equal(result, expected)
142+
143+
expected = Series(
144+
[
145+
Timestamp("20010101"),
146+
Timestamp("20010102"),
147+
Timestamp("20010103"),
148+
NaT,
149+
NaT,
150+
NaT,
151+
Timestamp("20010104"),
152+
Timestamp("20010105"),
153+
],
154+
dtype="M8[ns]",
155+
)
156+
result = s2._convert(datetime=True, numeric=False, timedelta=False, coerce=True)
157+
tm.assert_series_equal(result, expected)
158+
result = s2._convert(datetime=True, coerce=True)
159+
tm.assert_series_equal(result, expected)
160+
161+
ser = Series(["foo", "bar", 1, 1.0], dtype="O")
162+
result = ser._convert(datetime=True, coerce=True)
163+
expected = Series([NaT] * 2 + [Timestamp(1)] * 2)
164+
tm.assert_series_equal(result, expected)
165+
166+
# preserver if non-object
167+
ser = Series([1], dtype="float32")
168+
result = ser._convert(datetime=True, coerce=True)
169+
tm.assert_series_equal(result, ser)
170+
171+
# FIXME: dont leave commented-out
172+
# res = ser.copy()
173+
# r[0] = np.nan
174+
# result = res._convert(convert_dates=True,convert_numeric=False)
175+
# assert result.dtype == 'M8[ns]'
176+
177+
# dateutil parses some single letters into today's value as a date
178+
expected = Series([NaT])
179+
for x in "abcdefghijklmnopqrstuvwxyz":
180+
ser = Series([x])
181+
result = ser._convert(datetime=True, coerce=True)
182+
tm.assert_series_equal(result, expected)
183+
ser = Series([x.upper()])
184+
result = ser._convert(datetime=True, coerce=True)
185+
tm.assert_series_equal(result, expected)
186+
187+
def test_convert_no_arg_error(self):
188+
ser = Series(["1.0", "2"])
189+
msg = r"At least one of datetime, numeric or timedelta must be True\."
190+
with pytest.raises(ValueError, match=msg):
191+
ser._convert()
192+
193+
def test_convert_preserve_bool(self):
194+
ser = Series([1, True, 3, 5], dtype=object)
195+
res = ser._convert(datetime=True, numeric=True)
196+
expected = Series([1, 1, 3, 5], dtype="i8")
197+
tm.assert_series_equal(res, expected)
198+
199+
def test_convert_preserve_all_bool(self):
200+
ser = Series([False, True, False, False], dtype=object)
201+
res = ser._convert(datetime=True, numeric=True)
202+
expected = Series([False, True, False, False], dtype=bool)
203+
tm.assert_series_equal(res, expected)
+96
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
import numpy as np
2+
import pytest
3+
4+
from pandas import DatetimeIndex, IntervalIndex, NaT, Period, Series, Timestamp
5+
import pandas._testing as tm
6+
7+
8+
class TestDropna:
9+
def test_dropna_empty(self):
10+
ser = Series([], dtype=object)
11+
12+
assert len(ser.dropna()) == 0
13+
return_value = ser.dropna(inplace=True)
14+
assert return_value is None
15+
assert len(ser) == 0
16+
17+
# invalid axis
18+
msg = "No axis named 1 for object type Series"
19+
with pytest.raises(ValueError, match=msg):
20+
ser.dropna(axis=1)
21+
22+
def test_dropna_preserve_name(self, datetime_series):
23+
datetime_series[:5] = np.nan
24+
result = datetime_series.dropna()
25+
assert result.name == datetime_series.name
26+
name = datetime_series.name
27+
ts = datetime_series.copy()
28+
return_value = ts.dropna(inplace=True)
29+
assert return_value is None
30+
assert ts.name == name
31+
32+
def test_dropna_no_nan(self):
33+
for ser in [
34+
Series([1, 2, 3], name="x"),
35+
Series([False, True, False], name="x"),
36+
]:
37+
38+
result = ser.dropna()
39+
tm.assert_series_equal(result, ser)
40+
assert result is not ser
41+
42+
s2 = ser.copy()
43+
return_value = s2.dropna(inplace=True)
44+
assert return_value is None
45+
tm.assert_series_equal(s2, ser)
46+
47+
def test_dropna_intervals(self):
48+
ser = Series(
49+
[np.nan, 1, 2, 3],
50+
IntervalIndex.from_arrays([np.nan, 0, 1, 2], [np.nan, 1, 2, 3]),
51+
)
52+
53+
result = ser.dropna()
54+
expected = ser.iloc[1:]
55+
tm.assert_series_equal(result, expected)
56+
57+
def test_dropna_period_dtype(self):
58+
# GH#13737
59+
ser = Series([Period("2011-01", freq="M"), Period("NaT", freq="M")])
60+
result = ser.dropna()
61+
expected = Series([Period("2011-01", freq="M")])
62+
63+
tm.assert_series_equal(result, expected)
64+
65+
def test_datetime64_tz_dropna(self):
66+
# DatetimeBlock
67+
ser = Series(
68+
[
69+
Timestamp("2011-01-01 10:00"),
70+
NaT,
71+
Timestamp("2011-01-03 10:00"),
72+
NaT,
73+
]
74+
)
75+
result = ser.dropna()
76+
expected = Series(
77+
[Timestamp("2011-01-01 10:00"), Timestamp("2011-01-03 10:00")], index=[0, 2]
78+
)
79+
tm.assert_series_equal(result, expected)
80+
81+
# DatetimeBlockTZ
82+
idx = DatetimeIndex(
83+
["2011-01-01 10:00", NaT, "2011-01-03 10:00", NaT], tz="Asia/Tokyo"
84+
)
85+
ser = Series(idx)
86+
assert ser.dtype == "datetime64[ns, Asia/Tokyo]"
87+
result = ser.dropna()
88+
expected = Series(
89+
[
90+
Timestamp("2011-01-01 10:00", tz="Asia/Tokyo"),
91+
Timestamp("2011-01-03 10:00", tz="Asia/Tokyo"),
92+
],
93+
index=[0, 2],
94+
)
95+
assert result.dtype == "datetime64[ns, Asia/Tokyo]"
96+
tm.assert_series_equal(result, expected)

0 commit comments

Comments
 (0)