From 49e3e22705c240a7f75373de1aff1f59ac47d8bb Mon Sep 17 00:00:00 2001 From: Matt Roeschke Date: Mon, 23 Dec 2019 22:14:30 -0800 Subject: [PATCH 1/4] TST: Add tests for fixed issues --- pandas/tests/indexing/multiindex/test_loc.py | 26 ++++++++++++++++++ pandas/tests/indexing/test_loc.py | 8 ++++++ pandas/tests/resample/test_datetime_index.py | 17 ++++++++++++ pandas/tests/reshape/merge/test_join.py | 29 ++++++++++++++++++++ 4 files changed, 80 insertions(+) diff --git a/pandas/tests/indexing/multiindex/test_loc.py b/pandas/tests/indexing/multiindex/test_loc.py index b6b9f7f205394..da7d89a15125b 100644 --- a/pandas/tests/indexing/multiindex/test_loc.py +++ b/pandas/tests/indexing/multiindex/test_loc.py @@ -411,3 +411,29 @@ def test_loc_setitem_single_column_slice(): df.loc[:, "B"] = np.arange(4) expected.iloc[:, 2] = np.arange(4) tm.assert_frame_equal(df, expected) + + +def test_loc_nan_multiindex(): + # GH 5286 + tups = [ + ("Good Things", "C", np.nan), + ("Good Things", "R", np.nan), + ("Bad Things", "C", np.nan), + ("Bad Things", "T", np.nan), + ("Okay Things", "N", "B"), + ("Okay Things", "N", "D"), + ("Okay Things", "B", np.nan), + ("Okay Things", "D", np.nan), + ] + df = DataFrame( + np.ones((8, 4)), + columns=Index(["d1", "d2", "d3", "d4"]), + index=MultiIndex.from_tuples(tups, names=["u1", "u2", "u3"]), + ) + result = df.loc["Good Things"].loc["C"] + expected = DataFrame( + np.ones((1, 4)), + index=Index([np.nan], dtype="object", name="u3"), + columns=Index(["d1", "d2", "d3", "d4"], dtype="object"), + ) + tm.assert_frame_equal(result, expected) diff --git a/pandas/tests/indexing/test_loc.py b/pandas/tests/indexing/test_loc.py index 6f20ec649b200..dbb2d01e878f3 100644 --- a/pandas/tests/indexing/test_loc.py +++ b/pandas/tests/indexing/test_loc.py @@ -968,3 +968,11 @@ def test_loc_getitem_label_list_integer_labels( expected = df.iloc[:, expected_columns] result = df.loc[["A", "B", "C"], column_key] tm.assert_frame_equal(result, expected, check_column_type=check_column_type) + + +def test_loc_upcast_int(): + # GH 6485 + result = DataFrame({"a": range(10)}, dtype="i4") + result.loc[10] = 99 + expected = DataFrame({"a": list(range(10)) + [99]}) + tm.assert_frame_equal(result, expected) diff --git a/pandas/tests/resample/test_datetime_index.py b/pandas/tests/resample/test_datetime_index.py index 5837d526e3978..5d9356b4d049d 100644 --- a/pandas/tests/resample/test_datetime_index.py +++ b/pandas/tests/resample/test_datetime_index.py @@ -1564,3 +1564,20 @@ def test_get_timestamp_range_edges(first, last, offset, exp_first, exp_last): result = _get_timestamp_range_edges(first, last, offset) expected = (exp_first, exp_last) assert result == expected + + +def test_resample_apply_product(): + # GH 5586 + index = date_range(start="2012-01-31", freq="M", periods=12) + + ts = Series(range(12), index=index) + df = DataFrame(dict(A=ts, B=ts + 2)) + result = df.resample("Q").apply(np.product) + expected = DataFrame( + np.array([[0, 24], [60, 210], [336, 720], [990, 1716]]), + index=DatetimeIndex( + ["2012-03-31", "2012-06-30", "2012-09-30", "2012-12-31"], freq="Q-DEC" + ), + columns=["A", "B"], + ) + tm.assert_frame_equal(result, expected) diff --git a/pandas/tests/reshape/merge/test_join.py b/pandas/tests/reshape/merge/test_join.py index e477b7608ab93..4695cfee14366 100644 --- a/pandas/tests/reshape/merge/test_join.py +++ b/pandas/tests/reshape/merge/test_join.py @@ -770,6 +770,35 @@ def test_join_on_tz_aware_datetimeindex(self): expected["vals_2"] = pd.Series([np.nan] * 2 + list("tuv"), dtype=object) tm.assert_frame_equal(result, expected) + def test_join_datetime_string(self): + # GH 5647 + dfa = DataFrame( + [ + ["2012-08-02", "L", 10], + ["2012-08-02", "J", 15], + ["2013-04-06", "L", 20], + ["2013-04-06", "J", 25], + ], + columns=["x", "y", "a"], + ) + dfa["x"] = pd.to_datetime(dfa["x"]) + dfb = DataFrame( + [["2012-08-02", "J", 1], ["2013-04-06", "L", 2]], + columns=["x", "y", "z"], + index=[2, 4,], + ) + dfb["x"] = pd.to_datetime(dfb["x"]) + result = dfb.join(dfa.set_index(["x", "y"]), on=["x", "y"]) + expected = DataFrame( + [ + [pd.Timestamp("2012-08-02 00:00:00"), "J", 1, 15], + [pd.Timestamp("2013-04-06 00:00:00"), "L", 2, 20], + ], + index=[2, 4], + columns=["x", "y", "z", "a"], + ) + tm.assert_frame_equal(result, expected) + def _check_join(left, right, result, join_col, how="left", lsuffix="_x", rsuffix="_y"): From c93e8bf2b2cb3d90a452d1a6476ac1fd0b56c1f3 Mon Sep 17 00:00:00 2001 From: Matt Roeschke Date: Mon, 23 Dec 2019 22:16:42 -0800 Subject: [PATCH 2/4] Flake8 --- pandas/tests/reshape/merge/test_join.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandas/tests/reshape/merge/test_join.py b/pandas/tests/reshape/merge/test_join.py index 4695cfee14366..141dd4b5e1fa5 100644 --- a/pandas/tests/reshape/merge/test_join.py +++ b/pandas/tests/reshape/merge/test_join.py @@ -785,7 +785,7 @@ def test_join_datetime_string(self): dfb = DataFrame( [["2012-08-02", "J", 1], ["2013-04-06", "L", 2]], columns=["x", "y", "z"], - index=[2, 4,], + index=[2, 4], ) dfb["x"] = pd.to_datetime(dfb["x"]) result = dfb.join(dfa.set_index(["x", "y"]), on=["x", "y"]) From 63e4ee477bfa82cbc583f4824bb88f04b64010ba Mon Sep 17 00:00:00 2001 From: Matt Roeschke Date: Tue, 24 Dec 2019 10:34:48 -0800 Subject: [PATCH 3/4] Specify dtype --- pandas/tests/resample/test_datetime_index.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandas/tests/resample/test_datetime_index.py b/pandas/tests/resample/test_datetime_index.py index 5d9356b4d049d..bcd7081d5b1a5 100644 --- a/pandas/tests/resample/test_datetime_index.py +++ b/pandas/tests/resample/test_datetime_index.py @@ -1574,7 +1574,7 @@ def test_resample_apply_product(): df = DataFrame(dict(A=ts, B=ts + 2)) result = df.resample("Q").apply(np.product) expected = DataFrame( - np.array([[0, 24], [60, 210], [336, 720], [990, 1716]]), + np.array([[0, 24], [60, 210], [336, 720], [990, 1716]], dtype=np.int64), index=DatetimeIndex( ["2012-03-31", "2012-06-30", "2012-09-30", "2012-12-31"], freq="Q-DEC" ), From 57f56dcc8fbbf78ff31bacdd2681169445496ca9 Mon Sep 17 00:00:00 2001 From: Matt Roeschke Date: Tue, 24 Dec 2019 14:18:37 -0800 Subject: [PATCH 4/4] Remove test for # GH 6485 as it's not fixed --- pandas/tests/indexing/test_loc.py | 8 -------- 1 file changed, 8 deletions(-) diff --git a/pandas/tests/indexing/test_loc.py b/pandas/tests/indexing/test_loc.py index dbb2d01e878f3..6f20ec649b200 100644 --- a/pandas/tests/indexing/test_loc.py +++ b/pandas/tests/indexing/test_loc.py @@ -968,11 +968,3 @@ def test_loc_getitem_label_list_integer_labels( expected = df.iloc[:, expected_columns] result = df.loc[["A", "B", "C"], column_key] tm.assert_frame_equal(result, expected, check_column_type=check_column_type) - - -def test_loc_upcast_int(): - # GH 6485 - result = DataFrame({"a": range(10)}, dtype="i4") - result.loc[10] = 99 - expected = DataFrame({"a": list(range(10)) + [99]}) - tm.assert_frame_equal(result, expected)