Skip to content

Commit a7658d1

Browse files
jbrockmendelKevin D Smith
authored and
Kevin D Smith
committed
TST: collect tests by method (pandas-dev#37300)
1 parent d46a3d4 commit a7658d1

File tree

10 files changed

+424
-408
lines changed

10 files changed

+424
-408
lines changed

pandas/tests/frame/methods/test_count.py

+86-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
from pandas import DataFrame, Series
1+
import numpy as np
2+
import pytest
3+
4+
from pandas import DataFrame, Index, Series
25
import pandas._testing as tm
36

47

@@ -34,3 +37,85 @@ def test_count_objects(self, float_string_frame):
3437

3538
tm.assert_series_equal(dm.count(), df.count())
3639
tm.assert_series_equal(dm.count(1), df.count(1))
40+
41+
def test_count_level_corner(self, multiindex_dataframe_random_data):
42+
frame = multiindex_dataframe_random_data
43+
44+
ser = frame["A"][:0]
45+
result = ser.count(level=0)
46+
expected = Series(0, index=ser.index.levels[0], name="A")
47+
tm.assert_series_equal(result, expected)
48+
49+
df = frame[:0]
50+
result = df.count(level=0)
51+
expected = (
52+
DataFrame(
53+
index=ser.index.levels[0].set_names(["first"]), columns=df.columns
54+
)
55+
.fillna(0)
56+
.astype(np.int64)
57+
)
58+
tm.assert_frame_equal(result, expected)
59+
60+
def test_count_index_with_nan(self):
61+
# https://github.com/pandas-dev/pandas/issues/21824
62+
df = DataFrame(
63+
{
64+
"Person": ["John", "Myla", None, "John", "Myla"],
65+
"Age": [24.0, 5, 21.0, 33, 26],
66+
"Single": [False, True, True, True, False],
67+
}
68+
)
69+
70+
# count on row labels
71+
res = df.set_index(["Person", "Single"]).count(level="Person")
72+
expected = DataFrame(
73+
index=Index(["John", "Myla"], name="Person"),
74+
columns=Index(["Age"]),
75+
data=[2, 2],
76+
)
77+
tm.assert_frame_equal(res, expected)
78+
79+
# count on column labels
80+
res = df.set_index(["Person", "Single"]).T.count(level="Person", axis=1)
81+
expected = DataFrame(
82+
columns=Index(["John", "Myla"], name="Person"),
83+
index=Index(["Age"]),
84+
data=[[2, 2]],
85+
)
86+
tm.assert_frame_equal(res, expected)
87+
88+
def test_count_level(
89+
self,
90+
multiindex_year_month_day_dataframe_random_data,
91+
multiindex_dataframe_random_data,
92+
):
93+
ymd = multiindex_year_month_day_dataframe_random_data
94+
frame = multiindex_dataframe_random_data
95+
96+
def _check_counts(frame, axis=0):
97+
index = frame._get_axis(axis)
98+
for i in range(index.nlevels):
99+
result = frame.count(axis=axis, level=i)
100+
expected = frame.groupby(axis=axis, level=i).count()
101+
expected = expected.reindex_like(result).astype("i8")
102+
tm.assert_frame_equal(result, expected)
103+
104+
frame.iloc[1, [1, 2]] = np.nan
105+
frame.iloc[7, [0, 1]] = np.nan
106+
ymd.iloc[1, [1, 2]] = np.nan
107+
ymd.iloc[7, [0, 1]] = np.nan
108+
109+
_check_counts(frame)
110+
_check_counts(ymd)
111+
_check_counts(frame.T, axis=1)
112+
_check_counts(ymd.T, axis=1)
113+
114+
# can't call with level on regular DataFrame
115+
df = tm.makeTimeDataFrame()
116+
with pytest.raises(TypeError, match="hierarchical"):
117+
df.count(level=0)
118+
119+
frame["D"] = "foo"
120+
result = frame.count(level=0, numeric_only=True)
121+
tm.assert_index_equal(result.columns, Index(list("ABC"), name="exp"))

pandas/tests/frame/methods/test_pop.py

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

46

@@ -38,3 +40,28 @@ def test_pop_non_unique_cols(self):
3840
assert "b" in df.columns
3941
assert "a" not in df.columns
4042
assert len(df.index) == 2
43+
44+
def test_mixed_depth_pop(self):
45+
arrays = [
46+
["a", "top", "top", "routine1", "routine1", "routine2"],
47+
["", "OD", "OD", "result1", "result2", "result1"],
48+
["", "wx", "wy", "", "", ""],
49+
]
50+
51+
tuples = sorted(zip(*arrays))
52+
index = MultiIndex.from_tuples(tuples)
53+
df = DataFrame(np.random.randn(4, 6), columns=index)
54+
55+
df1 = df.copy()
56+
df2 = df.copy()
57+
result = df1.pop("a")
58+
expected = df2.pop(("a", "", ""))
59+
tm.assert_series_equal(expected, result, check_names=False)
60+
tm.assert_frame_equal(df1, df2)
61+
assert result.name == "a"
62+
63+
expected = df1["top"]
64+
df1 = df1.drop(["top"], axis=1)
65+
result = df2.pop("top")
66+
tm.assert_frame_equal(expected, result)
67+
tm.assert_frame_equal(df1, df2)

pandas/tests/frame/methods/test_set_index.py

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

6-
from pandas import DataFrame, DatetimeIndex, Index, MultiIndex, Series, date_range
6+
from pandas import (
7+
DataFrame,
8+
DatetimeIndex,
9+
Index,
10+
MultiIndex,
11+
Series,
12+
date_range,
13+
period_range,
14+
to_datetime,
15+
)
716
import pandas._testing as tm
817

918

@@ -352,6 +361,112 @@ def test_construction_with_categorical_index(self):
352361
idf = idf.reset_index().set_index("B")
353362
tm.assert_index_equal(idf.index, ci)
354363

364+
def test_set_index_datetime(self):
365+
# GH#3950
366+
df = DataFrame(
367+
{
368+
"label": ["a", "a", "a", "b", "b", "b"],
369+
"datetime": [
370+
"2011-07-19 07:00:00",
371+
"2011-07-19 08:00:00",
372+
"2011-07-19 09:00:00",
373+
"2011-07-19 07:00:00",
374+
"2011-07-19 08:00:00",
375+
"2011-07-19 09:00:00",
376+
],
377+
"value": range(6),
378+
}
379+
)
380+
df.index = to_datetime(df.pop("datetime"), utc=True)
381+
df.index = df.index.tz_convert("US/Pacific")
382+
383+
expected = DatetimeIndex(
384+
["2011-07-19 07:00:00", "2011-07-19 08:00:00", "2011-07-19 09:00:00"],
385+
name="datetime",
386+
)
387+
expected = expected.tz_localize("UTC").tz_convert("US/Pacific")
388+
389+
df = df.set_index("label", append=True)
390+
tm.assert_index_equal(df.index.levels[0], expected)
391+
tm.assert_index_equal(df.index.levels[1], Index(["a", "b"], name="label"))
392+
assert df.index.names == ["datetime", "label"]
393+
394+
df = df.swaplevel(0, 1)
395+
tm.assert_index_equal(df.index.levels[0], Index(["a", "b"], name="label"))
396+
tm.assert_index_equal(df.index.levels[1], expected)
397+
assert df.index.names == ["label", "datetime"]
398+
399+
df = DataFrame(np.random.random(6))
400+
idx1 = DatetimeIndex(
401+
[
402+
"2011-07-19 07:00:00",
403+
"2011-07-19 08:00:00",
404+
"2011-07-19 09:00:00",
405+
"2011-07-19 07:00:00",
406+
"2011-07-19 08:00:00",
407+
"2011-07-19 09:00:00",
408+
],
409+
tz="US/Eastern",
410+
)
411+
idx2 = DatetimeIndex(
412+
[
413+
"2012-04-01 09:00",
414+
"2012-04-01 09:00",
415+
"2012-04-01 09:00",
416+
"2012-04-02 09:00",
417+
"2012-04-02 09:00",
418+
"2012-04-02 09:00",
419+
],
420+
tz="US/Eastern",
421+
)
422+
idx3 = date_range("2011-01-01 09:00", periods=6, tz="Asia/Tokyo")
423+
idx3 = idx3._with_freq(None)
424+
425+
df = df.set_index(idx1)
426+
df = df.set_index(idx2, append=True)
427+
df = df.set_index(idx3, append=True)
428+
429+
expected1 = DatetimeIndex(
430+
["2011-07-19 07:00:00", "2011-07-19 08:00:00", "2011-07-19 09:00:00"],
431+
tz="US/Eastern",
432+
)
433+
expected2 = DatetimeIndex(
434+
["2012-04-01 09:00", "2012-04-02 09:00"], tz="US/Eastern"
435+
)
436+
437+
tm.assert_index_equal(df.index.levels[0], expected1)
438+
tm.assert_index_equal(df.index.levels[1], expected2)
439+
tm.assert_index_equal(df.index.levels[2], idx3)
440+
441+
# GH#7092
442+
tm.assert_index_equal(df.index.get_level_values(0), idx1)
443+
tm.assert_index_equal(df.index.get_level_values(1), idx2)
444+
tm.assert_index_equal(df.index.get_level_values(2), idx3)
445+
446+
def test_set_index_period(self):
447+
# GH#6631
448+
df = DataFrame(np.random.random(6))
449+
idx1 = period_range("2011-01-01", periods=3, freq="M")
450+
idx1 = idx1.append(idx1)
451+
idx2 = period_range("2013-01-01 09:00", periods=2, freq="H")
452+
idx2 = idx2.append(idx2).append(idx2)
453+
idx3 = period_range("2005", periods=6, freq="A")
454+
455+
df = df.set_index(idx1)
456+
df = df.set_index(idx2, append=True)
457+
df = df.set_index(idx3, append=True)
458+
459+
expected1 = period_range("2011-01-01", periods=3, freq="M")
460+
expected2 = period_range("2013-01-01 09:00", periods=2, freq="H")
461+
462+
tm.assert_index_equal(df.index.levels[0], expected1)
463+
tm.assert_index_equal(df.index.levels[1], expected2)
464+
tm.assert_index_equal(df.index.levels[2], idx3)
465+
466+
tm.assert_index_equal(df.index.get_level_values(0), idx1)
467+
tm.assert_index_equal(df.index.get_level_values(1), idx2)
468+
tm.assert_index_equal(df.index.get_level_values(2), idx3)
469+
355470

356471
class TestSetIndexInvalid:
357472
def test_set_index_verify_integrity(self, frame_of_index_cols):

pandas/tests/frame/methods/test_sort_index.py

+6
Original file line numberDiff line numberDiff line change
@@ -662,6 +662,12 @@ def test_sort_index_level_mixed(self):
662662
sorted_after.drop([("foo", "three")], axis=1),
663663
)
664664

665+
def test_sort_index_preserve_levels(self, multiindex_dataframe_random_data):
666+
frame = multiindex_dataframe_random_data
667+
668+
result = frame.sort_index()
669+
assert result.index.names == frame.index.names
670+
665671

666672
class TestDataFrameSortIndexKey:
667673
def test_sort_multi_index_key(self):

pandas/tests/frame/test_analytics.py

+34
Original file line numberDiff line numberDiff line change
@@ -1195,6 +1195,40 @@ def test_preserve_timezone(self, initial: str, method):
11951195
result = getattr(df, method)(axis=1)
11961196
tm.assert_series_equal(result, expected)
11971197

1198+
def test_frame_any_all_with_level(self):
1199+
df = DataFrame(
1200+
{"data": [False, False, True, False, True, False, True]},
1201+
index=[
1202+
["one", "one", "two", "one", "two", "two", "two"],
1203+
[0, 1, 0, 2, 1, 2, 3],
1204+
],
1205+
)
1206+
1207+
result = df.any(level=0)
1208+
ex = DataFrame({"data": [False, True]}, index=["one", "two"])
1209+
tm.assert_frame_equal(result, ex)
1210+
1211+
result = df.all(level=0)
1212+
ex = DataFrame({"data": [False, False]}, index=["one", "two"])
1213+
tm.assert_frame_equal(result, ex)
1214+
1215+
def test_frame_any_with_timedelta(self):
1216+
# GH#17667
1217+
df = DataFrame(
1218+
{
1219+
"a": Series([0, 0]),
1220+
"t": Series([pd.to_timedelta(0, "s"), pd.to_timedelta(1, "ms")]),
1221+
}
1222+
)
1223+
1224+
result = df.any(axis=0)
1225+
expected = Series(data=[False, True], index=["a", "t"])
1226+
tm.assert_series_equal(result, expected)
1227+
1228+
result = df.any(axis=1)
1229+
expected = Series(data=[False, True])
1230+
tm.assert_series_equal(result, expected)
1231+
11981232

11991233
def test_mixed_frame_with_integer_sum():
12001234
# https://github.com/pandas-dev/pandas/issues/34520

pandas/tests/series/indexing/test_setitem.py

+14-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import numpy as np
2+
import pytest
23

3-
from pandas import MultiIndex, NaT, Series, date_range
4+
from pandas import MultiIndex, NaT, Series, date_range, period_range
45
import pandas.testing as tm
56

67

@@ -26,3 +27,15 @@ def test_setitem_multiindex_empty_slice(self):
2627
expected = result.copy()
2728
result.loc[[]] = 0
2829
tm.assert_series_equal(result, expected)
30+
31+
32+
class TestSetitemPeriodDtype:
33+
@pytest.mark.parametrize("na_val", [None, np.nan])
34+
def test_setitem_na_period_dtype_casts_to_nat(self, na_val):
35+
ser = Series(period_range("2000-01-01", periods=10, freq="D"))
36+
37+
ser[3] = na_val
38+
assert ser[3] is NaT
39+
40+
ser[3:5] = na_val
41+
assert ser[4] is NaT

pandas/tests/series/methods/test_repeat.py

+8-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import numpy as np
22
import pytest
33

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

77

@@ -28,3 +28,10 @@ def test_numpy_repeat(self):
2828
msg = "the 'axis' parameter is not supported"
2929
with pytest.raises(ValueError, match=msg):
3030
np.repeat(ser, 2, axis=0)
31+
32+
def test_repeat_with_multiindex(self):
33+
# GH#9361, fixed by GH#7891
34+
m_idx = MultiIndex.from_tuples([(1, 2), (3, 4), (5, 6), (7, 8)])
35+
data = ["a", "b", "c", "d"]
36+
m_df = Series(data, index=m_idx)
37+
assert m_df.repeat(3).shape == (3 * len(data),)

pandas/tests/series/test_period.py

-15
Original file line numberDiff line numberDiff line change
@@ -49,21 +49,6 @@ def test_NaT_cast(self):
4949
expected = Series([pd.NaT], dtype="period[D]")
5050
tm.assert_series_equal(result, expected)
5151

52-
def test_set_none(self):
53-
self.series[3] = None
54-
assert self.series[3] is pd.NaT
55-
56-
self.series[3:5] = None
57-
assert self.series[4] is pd.NaT
58-
59-
def test_set_nan(self):
60-
# Do we want to allow this?
61-
self.series[5] = np.nan
62-
assert self.series[5] is pd.NaT
63-
64-
self.series[5:7] = np.nan
65-
assert self.series[6] is pd.NaT
66-
6752
def test_intercept_astype_object(self):
6853
expected = self.series.astype("object")
6954

0 commit comments

Comments
 (0)