Skip to content

Commit 2b7ea97

Browse files
jbrockmendelpull[bot]
authored andcommitted
TST/REF: tests.generic (#37618)
1 parent 84263fc commit 2b7ea97

File tree

7 files changed

+112
-121
lines changed

7 files changed

+112
-121
lines changed

pandas/tests/frame/methods/test_equals.py

+56-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
from pandas import DataFrame
1+
import numpy as np
2+
3+
from pandas import DataFrame, date_range
24
import pandas._testing as tm
35

46

@@ -21,3 +23,56 @@ def test_equals_different_blocks(self):
2123
tm.assert_frame_equal(df0, df1)
2224
assert df0.equals(df1)
2325
assert df1.equals(df0)
26+
27+
def test_equals(self):
28+
# Add object dtype column with nans
29+
index = np.random.random(10)
30+
df1 = DataFrame(np.random.random(10), index=index, columns=["floats"])
31+
df1["text"] = "the sky is so blue. we could use more chocolate.".split()
32+
df1["start"] = date_range("2000-1-1", periods=10, freq="T")
33+
df1["end"] = date_range("2000-1-1", periods=10, freq="D")
34+
df1["diff"] = df1["end"] - df1["start"]
35+
df1["bool"] = np.arange(10) % 3 == 0
36+
df1.loc[::2] = np.nan
37+
df2 = df1.copy()
38+
assert df1["text"].equals(df2["text"])
39+
assert df1["start"].equals(df2["start"])
40+
assert df1["end"].equals(df2["end"])
41+
assert df1["diff"].equals(df2["diff"])
42+
assert df1["bool"].equals(df2["bool"])
43+
assert df1.equals(df2)
44+
assert not df1.equals(object)
45+
46+
# different dtype
47+
different = df1.copy()
48+
different["floats"] = different["floats"].astype("float32")
49+
assert not df1.equals(different)
50+
51+
# different index
52+
different_index = -index
53+
different = df2.set_index(different_index)
54+
assert not df1.equals(different)
55+
56+
# different columns
57+
different = df2.copy()
58+
different.columns = df2.columns[::-1]
59+
assert not df1.equals(different)
60+
61+
# DatetimeIndex
62+
index = date_range("2000-1-1", periods=10, freq="T")
63+
df1 = df1.set_index(index)
64+
df2 = df1.copy()
65+
assert df1.equals(df2)
66+
67+
# MultiIndex
68+
df3 = df1.set_index(["text"], append=True)
69+
df2 = df1.set_index(["text"], append=True)
70+
assert df3.equals(df2)
71+
72+
df2 = df1.set_index(["floats"], append=True)
73+
assert not df3.equals(df2)
74+
75+
# NaN in index
76+
df3 = df1.set_index(["floats"], append=True)
77+
df2 = df1.set_index(["floats"], append=True)
78+
assert df3.equals(df2)

pandas/tests/frame/methods/test_head_tail.py

+24
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,30 @@
44
import pandas._testing as tm
55

66

7+
def test_head_tail_generic(index, frame_or_series):
8+
# GH#5370
9+
10+
ndim = 2 if frame_or_series is DataFrame else 1
11+
shape = (len(index),) * ndim
12+
vals = np.random.randn(*shape)
13+
obj = frame_or_series(vals, index=index)
14+
15+
tm.assert_equal(obj.head(), obj.iloc[:5])
16+
tm.assert_equal(obj.tail(), obj.iloc[-5:])
17+
18+
# 0-len
19+
tm.assert_equal(obj.head(0), obj.iloc[0:0])
20+
tm.assert_equal(obj.tail(0), obj.iloc[0:0])
21+
22+
# bounded
23+
tm.assert_equal(obj.head(len(obj) + 1), obj)
24+
tm.assert_equal(obj.tail(len(obj) + 1), obj)
25+
26+
# neg index
27+
tm.assert_equal(obj.head(-3), obj.head(len(index) - 3))
28+
tm.assert_equal(obj.tail(-3), obj.tail(len(index) - 3))
29+
30+
731
def test_head_tail(float_frame):
832
tm.assert_frame_equal(float_frame.head(), float_frame[:5])
933
tm.assert_frame_equal(float_frame.tail(), float_frame[-5:])

pandas/tests/generic/methods/test_first_valid_index.py

+2-3
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,9 @@
99

1010

1111
class TestFirstValidIndex:
12-
@pytest.mark.parametrize("klass", [Series, DataFrame])
13-
def test_first_valid_index_single_nan(self, klass):
12+
def test_first_valid_index_single_nan(self, frame_or_series):
1413
# GH#9752 Series/DataFrame should both return None, not raise
15-
obj = klass([np.nan])
14+
obj = frame_or_series([np.nan])
1615

1716
assert obj.first_valid_index() is None
1817
assert obj.iloc[:0].first_valid_index() is None

pandas/tests/generic/methods/test_pipe.py

+6-9
Original file line numberDiff line numberDiff line change
@@ -5,32 +5,29 @@
55

66

77
class TestPipe:
8-
@pytest.mark.parametrize("klass", [Series, DataFrame])
9-
def test_pipe(self, klass):
8+
def test_pipe(self, frame_or_series):
109
obj = DataFrame({"A": [1, 2, 3]})
1110
expected = DataFrame({"A": [1, 4, 9]})
12-
if klass is Series:
11+
if frame_or_series is Series:
1312
obj = obj["A"]
1413
expected = expected["A"]
1514

1615
f = lambda x, y: x ** y
1716
result = obj.pipe(f, 2)
1817
tm.assert_equal(result, expected)
1918

20-
@pytest.mark.parametrize("klass", [Series, DataFrame])
21-
def test_pipe_tuple(self, klass):
19+
def test_pipe_tuple(self, frame_or_series):
2220
obj = DataFrame({"A": [1, 2, 3]})
23-
if klass is Series:
21+
if frame_or_series is Series:
2422
obj = obj["A"]
2523

2624
f = lambda x, y: y
2725
result = obj.pipe((f, "y"), 0)
2826
tm.assert_equal(result, obj)
2927

30-
@pytest.mark.parametrize("klass", [Series, DataFrame])
31-
def test_pipe_tuple_error(self, klass):
28+
def test_pipe_tuple_error(self, frame_or_series):
3229
obj = DataFrame({"A": [1, 2, 3]})
33-
if klass is Series:
30+
if frame_or_series is Series:
3431
obj = obj["A"]
3532

3633
f = lambda x, y: y

pandas/tests/generic/methods/test_reorder_levels.py

+5-6
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,19 @@
11
import numpy as np
22
import pytest
33

4-
from pandas import DataFrame, MultiIndex, Series
4+
from pandas import DataFrame, MultiIndex
55
import pandas._testing as tm
66

77

88
class TestReorderLevels:
9-
@pytest.mark.parametrize("klass", [Series, DataFrame])
10-
def test_reorder_levels(self, klass):
9+
def test_reorder_levels(self, frame_or_series):
1110
index = MultiIndex(
1211
levels=[["bar"], ["one", "two", "three"], [0, 1]],
1312
codes=[[0, 0, 0, 0, 0, 0], [0, 1, 2, 0, 1, 2], [0, 1, 0, 1, 0, 1]],
1413
names=["L0", "L1", "L2"],
1514
)
1615
df = DataFrame({"A": np.arange(6), "B": np.arange(6)}, index=index)
17-
obj = df if klass is DataFrame else df["A"]
16+
obj = df if frame_or_series is DataFrame else df["A"]
1817

1918
# no change, position
2019
result = obj.reorder_levels([0, 1, 2])
@@ -32,7 +31,7 @@ def test_reorder_levels(self, klass):
3231
names=["L1", "L2", "L0"],
3332
)
3433
expected = DataFrame({"A": np.arange(6), "B": np.arange(6)}, index=e_idx)
35-
expected = expected if klass is DataFrame else expected["A"]
34+
expected = expected if frame_or_series is DataFrame else expected["A"]
3635
tm.assert_equal(result, expected)
3736

3837
result = obj.reorder_levels([0, 0, 0])
@@ -42,7 +41,7 @@ def test_reorder_levels(self, klass):
4241
names=["L0", "L0", "L0"],
4342
)
4443
expected = DataFrame({"A": np.arange(6), "B": np.arange(6)}, index=e_idx)
45-
expected = expected if klass is DataFrame else expected["A"]
44+
expected = expected if frame_or_series is DataFrame else expected["A"]
4645
tm.assert_equal(result, expected)
4746

4847
result = obj.reorder_levels(["L0", "L0", "L0"])

pandas/tests/generic/methods/test_sample.py

+4-6
Original file line numberDiff line numberDiff line change
@@ -155,22 +155,20 @@ def test_sample_none_weights(self, obj):
155155
),
156156
],
157157
)
158-
@pytest.mark.parametrize("klass", [Series, DataFrame])
159-
def test_sample_random_state(self, func_str, arg, klass):
158+
def test_sample_random_state(self, func_str, arg, frame_or_series):
160159
# GH#32503
161160
obj = DataFrame({"col1": range(10, 20), "col2": range(20, 30)})
162-
if klass is Series:
161+
if frame_or_series is Series:
163162
obj = obj["col1"]
164163
result = obj.sample(n=3, random_state=eval(func_str)(arg))
165164
expected = obj.sample(n=3, random_state=com.random_state(eval(func_str)(arg)))
166165
tm.assert_equal(result, expected)
167166

168-
@pytest.mark.parametrize("klass", [Series, DataFrame])
169-
def test_sample_upsampling_without_replacement(self, klass):
167+
def test_sample_upsampling_without_replacement(self, frame_or_series):
170168
# GH#27451
171169

172170
obj = DataFrame({"A": list("abc")})
173-
if klass is Series:
171+
if frame_or_series is Series:
174172
obj = obj["A"]
175173

176174
msg = (

pandas/tests/generic/test_generic.py

+15-96
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@
55

66
from pandas.core.dtypes.common import is_scalar
77

8-
import pandas as pd
9-
from pandas import DataFrame, Series, date_range
8+
from pandas import DataFrame, Series
109
import pandas._testing as tm
1110

1211
# ----------------------------------------------------------------------
@@ -248,31 +247,6 @@ def test_metadata_propagation(self):
248247
self.check_metadata(v1 & v2)
249248
self.check_metadata(v1 | v2)
250249

251-
def test_head_tail(self, index):
252-
# GH5370
253-
254-
o = self._construct(shape=len(index))
255-
256-
axis = o._get_axis_name(0)
257-
setattr(o, axis, index)
258-
259-
o.head()
260-
261-
self._compare(o.head(), o.iloc[:5])
262-
self._compare(o.tail(), o.iloc[-5:])
263-
264-
# 0-len
265-
self._compare(o.head(0), o.iloc[0:0])
266-
self._compare(o.tail(0), o.iloc[0:0])
267-
268-
# bounded
269-
self._compare(o.head(len(o) + 1), o)
270-
self._compare(o.tail(len(o) + 1), o)
271-
272-
# neg index
273-
self._compare(o.head(-3), o.head(len(index) - 3))
274-
self._compare(o.tail(-3), o.tail(len(index) - 3))
275-
276250
def test_size_compat(self):
277251
# GH8846
278252
# size property should be defined
@@ -460,102 +434,47 @@ def test_take_invalid_kwargs(self):
460434
obj.take(indices, mode="clip")
461435

462436
@pytest.mark.parametrize("is_copy", [True, False])
463-
def test_depr_take_kwarg_is_copy(self, is_copy):
437+
def test_depr_take_kwarg_is_copy(self, is_copy, frame_or_series):
464438
# GH 27357
465-
df = DataFrame({"A": [1, 2, 3]})
439+
obj = DataFrame({"A": [1, 2, 3]})
440+
if frame_or_series is Series:
441+
obj = obj["A"]
442+
466443
msg = (
467444
"is_copy is deprecated and will be removed in a future version. "
468445
"'take' always returns a copy, so there is no need to specify this."
469446
)
470447
with tm.assert_produces_warning(FutureWarning) as w:
471-
df.take([0, 1], is_copy=is_copy)
448+
obj.take([0, 1], is_copy=is_copy)
472449

473450
assert w[0].message.args[0] == msg
474451

475-
s = Series([1, 2, 3])
476-
with tm.assert_produces_warning(FutureWarning):
477-
s.take([0, 1], is_copy=is_copy)
478-
479-
def test_equals(self):
480-
# Add object dtype column with nans
481-
index = np.random.random(10)
482-
df1 = DataFrame(np.random.random(10), index=index, columns=["floats"])
483-
df1["text"] = "the sky is so blue. we could use more chocolate.".split()
484-
df1["start"] = date_range("2000-1-1", periods=10, freq="T")
485-
df1["end"] = date_range("2000-1-1", periods=10, freq="D")
486-
df1["diff"] = df1["end"] - df1["start"]
487-
df1["bool"] = np.arange(10) % 3 == 0
488-
df1.loc[::2] = np.nan
489-
df2 = df1.copy()
490-
assert df1["text"].equals(df2["text"])
491-
assert df1["start"].equals(df2["start"])
492-
assert df1["end"].equals(df2["end"])
493-
assert df1["diff"].equals(df2["diff"])
494-
assert df1["bool"].equals(df2["bool"])
495-
assert df1.equals(df2)
496-
assert not df1.equals(object)
497-
498-
# different dtype
499-
different = df1.copy()
500-
different["floats"] = different["floats"].astype("float32")
501-
assert not df1.equals(different)
502-
503-
# different index
504-
different_index = -index
505-
different = df2.set_index(different_index)
506-
assert not df1.equals(different)
507-
508-
# different columns
509-
different = df2.copy()
510-
different.columns = df2.columns[::-1]
511-
assert not df1.equals(different)
512-
513-
# DatetimeIndex
514-
index = pd.date_range("2000-1-1", periods=10, freq="T")
515-
df1 = df1.set_index(index)
516-
df2 = df1.copy()
517-
assert df1.equals(df2)
518-
519-
# MultiIndex
520-
df3 = df1.set_index(["text"], append=True)
521-
df2 = df1.set_index(["text"], append=True)
522-
assert df3.equals(df2)
523-
524-
df2 = df1.set_index(["floats"], append=True)
525-
assert not df3.equals(df2)
526-
527-
# NaN in index
528-
df3 = df1.set_index(["floats"], append=True)
529-
df2 = df1.set_index(["floats"], append=True)
530-
assert df3.equals(df2)
531-
532-
@pytest.mark.parametrize("box", [pd.Series, pd.DataFrame])
533-
def test_axis_classmethods(self, box):
452+
def test_axis_classmethods(self, frame_or_series):
453+
box = frame_or_series
534454
obj = box(dtype=object)
535455
values = box._AXIS_TO_AXIS_NUMBER.keys()
536456
for v in values:
537457
assert obj._get_axis_number(v) == box._get_axis_number(v)
538458
assert obj._get_axis_name(v) == box._get_axis_name(v)
539459
assert obj._get_block_manager_axis(v) == box._get_block_manager_axis(v)
540460

541-
@pytest.mark.parametrize("box", [pd.Series, pd.DataFrame])
542-
def test_axis_names_deprecated(self, box):
461+
def test_axis_names_deprecated(self, frame_or_series):
543462
# GH33637
463+
box = frame_or_series
544464
obj = box(dtype=object)
545465
with tm.assert_produces_warning(FutureWarning, check_stacklevel=False):
546466
obj._AXIS_NAMES
547467

548-
@pytest.mark.parametrize("box", [pd.Series, pd.DataFrame])
549-
def test_axis_numbers_deprecated(self, box):
468+
def test_axis_numbers_deprecated(self, frame_or_series):
550469
# GH33637
470+
box = frame_or_series
551471
obj = box(dtype=object)
552472
with tm.assert_produces_warning(FutureWarning, check_stacklevel=False):
553473
obj._AXIS_NUMBERS
554474

555-
@pytest.mark.parametrize("as_frame", [True, False])
556-
def test_flags_identity(self, as_frame):
475+
def test_flags_identity(self, frame_or_series):
557476
s = Series([1, 2])
558-
if as_frame:
477+
if frame_or_series is DataFrame:
559478
s = s.to_frame()
560479

561480
assert s.flags is s.flags

0 commit comments

Comments
 (0)