Skip to content

Commit 01babb5

Browse files
jbrockmendeljreback
authored andcommitted
BUG: fix+test quantile with empty DataFrame, closes #23925 (#27436)
1 parent 4d9016e commit 01babb5

File tree

3 files changed

+23
-6
lines changed

3 files changed

+23
-6
lines changed

doc/source/whatsnew/v1.0.0.rst

+1-5
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ Timezones
108108

109109
Numeric
110110
^^^^^^^
111-
111+
- Bug in :meth:`DataFrame.quantile` with zero-column :class:`DataFrame` incorrectly raising (:issue:`23925`)
112112
-
113113
-
114114

@@ -191,10 +191,6 @@ ExtensionArray
191191
-
192192

193193

194-
Other
195-
^^^^^
196-
197-
198194
.. _whatsnew_1000.contributors:
199195

200196
Contributors

pandas/core/frame.py

+7
Original file line numberDiff line numberDiff line change
@@ -8215,6 +8215,13 @@ def quantile(self, q=0.5, axis=0, numeric_only=True, interpolation="linear"):
82158215
if is_transposed:
82168216
data = data.T
82178217

8218+
if len(data.columns) == 0:
8219+
# GH#23925 _get_numeric_data may have dropped all columns
8220+
cols = Index([], name=self.columns.name)
8221+
if is_list_like(q):
8222+
return self._constructor([], index=q, columns=cols)
8223+
return self._constructor_sliced([], index=cols, name=q)
8224+
82188225
result = data._data.quantile(
82198226
qs=q, axis=1, interpolation=interpolation, transposed=is_transposed
82208227
)

pandas/tests/frame/test_quantile.py

+15-1
Original file line numberDiff line numberDiff line change
@@ -439,7 +439,7 @@ def test_quantile_nat(self):
439439
)
440440
tm.assert_frame_equal(res, exp)
441441

442-
def test_quantile_empty(self):
442+
def test_quantile_empty_no_rows(self):
443443

444444
# floats
445445
df = DataFrame(columns=["a", "b"], dtype="float64")
@@ -467,3 +467,17 @@ def test_quantile_empty(self):
467467

468468
# FIXME (gives NaNs instead of NaT in 0.18.1 or 0.19.0)
469469
# res = df.quantile(0.5, numeric_only=False)
470+
471+
def test_quantile_empty_no_columns(self):
472+
# GH#23925 _get_numeric_data may drop all columns
473+
df = pd.DataFrame(pd.date_range("1/1/18", periods=5))
474+
df.columns.name = "captain tightpants"
475+
result = df.quantile(0.5)
476+
expected = pd.Series([], index=[], name=0.5)
477+
expected.index.name = "captain tightpants"
478+
tm.assert_series_equal(result, expected)
479+
480+
result = df.quantile([0.5])
481+
expected = pd.DataFrame([], index=[0.5], columns=[])
482+
expected.columns.name = "captain tightpants"
483+
tm.assert_frame_equal(result, expected)

0 commit comments

Comments
 (0)