From a06794d2d4d9ae749452b666a72679dba5ba1cd1 Mon Sep 17 00:00:00 2001 From: pbreach Date: Mon, 19 Dec 2016 00:28:32 -0500 Subject: [PATCH 1/6] BUG: Fixed bug in DataFrame.describe when percentiles are passed as array with no median --- pandas/core/generic.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pandas/core/generic.py b/pandas/core/generic.py index 48d799811aa94..91ce523d7526b 100644 --- a/pandas/core/generic.py +++ b/pandas/core/generic.py @@ -5255,6 +5255,9 @@ def abs(self): @Appender(_shared_docs['describe'] % _shared_doc_kwargs) def describe(self, percentiles=None, include=None, exclude=None): + # explicit conversion of `percentiles` to list + percentiles = list(percentiles) + if self.ndim >= 3: msg = "describe is not implemented on Panel or PanelND objects." raise NotImplementedError(msg) From d192ac72f09f783d6477f6999de9f2e3bcb34297 Mon Sep 17 00:00:00 2001 From: pbreach Date: Mon, 19 Dec 2016 00:40:11 -0500 Subject: [PATCH 2/6] Fixed whitespace issue --- pandas/core/generic.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pandas/core/generic.py b/pandas/core/generic.py index 91ce523d7526b..36bb48a07a025 100644 --- a/pandas/core/generic.py +++ b/pandas/core/generic.py @@ -5255,8 +5255,8 @@ def abs(self): @Appender(_shared_docs['describe'] % _shared_doc_kwargs) def describe(self, percentiles=None, include=None, exclude=None): - # explicit conversion of `percentiles` to list - percentiles = list(percentiles) + # explicit conversion of `percentiles` to list + percentiles = list(percentiles) if self.ndim >= 3: msg = "describe is not implemented on Panel or PanelND objects." From f95439208b3c3dcfb62ebddc61319cbdd9ad74f7 Mon Sep 17 00:00:00 2001 From: pbreach Date: Mon, 19 Dec 2016 00:55:20 -0500 Subject: [PATCH 3/6] Moved conversion to if percentiles is not None --- pandas/core/generic.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pandas/core/generic.py b/pandas/core/generic.py index 36bb48a07a025..3678168890444 100644 --- a/pandas/core/generic.py +++ b/pandas/core/generic.py @@ -5255,9 +5255,6 @@ def abs(self): @Appender(_shared_docs['describe'] % _shared_doc_kwargs) def describe(self, percentiles=None, include=None, exclude=None): - # explicit conversion of `percentiles` to list - percentiles = list(percentiles) - if self.ndim >= 3: msg = "describe is not implemented on Panel or PanelND objects." raise NotImplementedError(msg) @@ -5265,6 +5262,9 @@ def describe(self, percentiles=None, include=None, exclude=None): raise ValueError("Cannot describe a DataFrame without columns") if percentiles is not None: + # explicit conversion of `percentiles` to list + percentiles = list(percentiles) + # get them all to be in [0, 1] self._check_percentile(percentiles) From 72fe0cb8fb596bdb0a4ae8c8ae181053117ef87d Mon Sep 17 00:00:00 2001 From: pbreach Date: Mon, 19 Dec 2016 01:27:50 -0500 Subject: [PATCH 4/6] Added what's new entry --- doc/source/whatsnew/v0.20.0.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/source/whatsnew/v0.20.0.txt b/doc/source/whatsnew/v0.20.0.txt index 76ba4a5f723fa..e84c8beeadcc7 100644 --- a/doc/source/whatsnew/v0.20.0.txt +++ b/doc/source/whatsnew/v0.20.0.txt @@ -236,7 +236,7 @@ Bug Fixes - Bug in ``TimedeltaIndex`` addition where overflow was being allowed without error (:issue:`14816`) - Bug in ``astype()`` where ``inf`` values were incorrectly converted to integers. Now raises error now with ``astype()`` for Series and DataFrames (:issue:`14265`) - +- Bug in ``describe()`` when passing a numpy array which does not contain the median to the ``percentiles`` keyword argument (:issue:`14908`) From b5d09a6a384ffa348b4e15d92d3b9a87d873853c Mon Sep 17 00:00:00 2001 From: pbreach Date: Mon, 19 Dec 2016 01:36:26 -0500 Subject: [PATCH 5/6] Added test for median insertion with ndarray --- pandas/tests/test_generic.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/pandas/tests/test_generic.py b/pandas/tests/test_generic.py index 84df82db69f77..96b8399bd6eae 100644 --- a/pandas/tests/test_generic.py +++ b/pandas/tests/test_generic.py @@ -996,6 +996,15 @@ def test_describe_percentiles_insert_median(self): self.assertTrue('0%' in d1.index) self.assertTrue('100%' in d2.index) + def test_describe_percentiles_insert_median_ndarray(self): + df = tm.makeDataFrame() + try: + d1 = df.describe(percentiles=np.array([.25, .75])) + except AttributeError: + self.fail + d2 = df.describe(percentiles=[.25, .75]) + assert_frame_equal(d1, d2) + def test_describe_percentiles_unique(self): # GH13104 df = tm.makeDataFrame() From 5c8199b89490c26e980c473219b1c4b75d4cf057 Mon Sep 17 00:00:00 2001 From: pbreach Date: Mon, 19 Dec 2016 11:59:30 -0500 Subject: [PATCH 6/6] Minor test fix --- pandas/tests/test_generic.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/pandas/tests/test_generic.py b/pandas/tests/test_generic.py index 96b8399bd6eae..3500ce913462a 100644 --- a/pandas/tests/test_generic.py +++ b/pandas/tests/test_generic.py @@ -997,13 +997,11 @@ def test_describe_percentiles_insert_median(self): self.assertTrue('100%' in d2.index) def test_describe_percentiles_insert_median_ndarray(self): + # GH14908 df = tm.makeDataFrame() - try: - d1 = df.describe(percentiles=np.array([.25, .75])) - except AttributeError: - self.fail - d2 = df.describe(percentiles=[.25, .75]) - assert_frame_equal(d1, d2) + result = df.describe(percentiles=np.array([.25, .75])) + expected = df.describe(percentiles=[.25, .75]) + assert_frame_equal(result, expected) def test_describe_percentiles_unique(self): # GH13104