From ffbb0b5e4eca2da296ee5aae4b11c229aef3d962 Mon Sep 17 00:00:00 2001 From: Jeff Reback Date: Tue, 16 May 2017 18:39:23 -0400 Subject: [PATCH] TST: followup to #16364, catch errstate warnings --- pandas/core/generic.py | 14 +++++++++----- pandas/tests/frame/test_analytics.py | 11 +++++++++++ 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/pandas/core/generic.py b/pandas/core/generic.py index 3e1c5c3f354fd..c33b30c78d812 100644 --- a/pandas/core/generic.py +++ b/pandas/core/generic.py @@ -4113,11 +4113,15 @@ def _clip_with_scalar(self, lower, upper): result = self.values mask = isnull(result) - if upper is not None: - result = np.where(result >= upper, upper, result) - if lower is not None: - result = np.where(result <= lower, lower, result) - result[mask] = np.nan + + with np.errstate(all='ignore'): + if upper is not None: + result = np.where(result >= upper, upper, result) + if lower is not None: + result = np.where(result <= lower, lower, result) + if np.any(mask): + result[mask] = np.nan + return self._constructor( result, **self._construct_axes_dict()).__finalize__(self) diff --git a/pandas/tests/frame/test_analytics.py b/pandas/tests/frame/test_analytics.py index 1b6471fcef565..fa9823bf000a2 100644 --- a/pandas/tests/frame/test_analytics.py +++ b/pandas/tests/frame/test_analytics.py @@ -1824,6 +1824,17 @@ def test_dataframe_clip(self): assert (clipped_df.values[ub_mask] == ub).all() assert (clipped_df.values[mask] == df.values[mask]).all() + @pytest.mark.xfail(reason=("clip on mixed integer or floats " + "with integer clippers coerces to float")) + def test_clip_mixed_numeric(self): + + df = DataFrame({'A': [1, 2, 3], + 'B': [1., np.nan, 3.]}) + result = df.clip(1, 2) + expected = DataFrame({'A': [1, 2, 2], + 'B': [1., np.nan, 2.]}) + tm.assert_frame_equal(result, expected, check_like=True) + def test_clip_against_series(self): # GH #6966