Skip to content

Commit 87c2c2a

Browse files
kerncjreback
authored andcommitted
ENH: .squeeze has gained the axis parameter
closes #15339 Author: Kernc <[email protected]> Closes #15335 from kernc/squeeze_axis_param and squashes the following commits: 44d3c54 [Kernc] fixup! ENH: .squeeze accepts axis parameter cc018c9 [Kernc] ENH: .squeeze accepts axis parameter
1 parent fe246cc commit 87c2c2a

File tree

4 files changed

+34
-16
lines changed

4 files changed

+34
-16
lines changed

doc/source/whatsnew/v0.20.0.txt

+1
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,7 @@ Other enhancements
149149
- ``Series/DataFrame.asfreq()`` have gained a ``fill_value`` parameter, to fill missing values (:issue:`3715`).
150150
- ``Series/DataFrame.resample.asfreq`` have gained a ``fill_value`` parameter, to fill missing values during resampling (:issue:`3715`).
151151
- ``pandas.tools.hashing`` has gained a ``hash_tuples`` routine, and ``hash_pandas_object`` has gained the ability to hash a ``MultiIndex`` (:issue:`15224`)
152+
- ``Series/DataFrame.squeeze()`` have gained the ``axis`` parameter. (:issue:`15339`)
152153

153154
.. _ISO 8601 duration: https://en.wikipedia.org/wiki/ISO_8601#Durations
154155

pandas/compat/numpy/function.py

-7
Original file line numberDiff line numberDiff line change
@@ -214,13 +214,6 @@ def validate_cum_func_with_skipna(skipna, args, kwargs, name):
214214
validate_stat_ddof_func = CompatValidator(STAT_DDOF_FUNC_DEFAULTS,
215215
method='kwargs')
216216

217-
# Currently, numpy (v1.11) has backwards compatibility checks
218-
# in place so that this 'kwargs' parameter is technically
219-
# unnecessary, but in the long-run, this will be needed.
220-
SQUEEZE_DEFAULTS = dict(axis=None)
221-
validate_squeeze = CompatValidator(SQUEEZE_DEFAULTS, fname='squeeze',
222-
method='kwargs')
223-
224217
TAKE_DEFAULTS = OrderedDict()
225218
TAKE_DEFAULTS['out'] = None
226219
TAKE_DEFAULTS['mode'] = 'raise'

pandas/core/generic.py

+19-5
Original file line numberDiff line numberDiff line change
@@ -532,13 +532,27 @@ def pop(self, item):
532532

533533
return result
534534

535-
def squeeze(self, **kwargs):
536-
"""Squeeze length 1 dimensions."""
537-
nv.validate_squeeze(tuple(), kwargs)
535+
def squeeze(self, axis=None):
536+
"""
537+
Squeeze length 1 dimensions.
538538
539+
Parameters
540+
----------
541+
axis : None, integer or string axis name, optional
542+
The axis to squeeze if 1-sized.
543+
544+
.. versionadded:: 0.20.0
545+
546+
Returns
547+
-------
548+
scalar if 1-sized, else original object
549+
"""
550+
axis = (self._AXIS_NAMES if axis is None else
551+
(self._get_axis_number(axis),))
539552
try:
540-
return self.iloc[tuple([0 if len(a) == 1 else slice(None)
541-
for a in self.axes])]
553+
return self.iloc[
554+
tuple([0 if i in axis and len(a) == 1 else slice(None)
555+
for i, a in enumerate(self.axes)])]
542556
except:
543557
return self
544558

pandas/tests/test_generic.py

+14-4
Original file line numberDiff line numberDiff line change
@@ -1770,17 +1770,27 @@ def test_squeeze(self):
17701770
[tm.assert_series_equal(empty_series, higher_dim.squeeze())
17711771
for higher_dim in [empty_series, empty_frame, empty_panel]]
17721772

1773+
# axis argument
1774+
df = tm.makeTimeDataFrame(nper=1).iloc[:, :1]
1775+
tm.assert_equal(df.shape, (1, 1))
1776+
tm.assert_series_equal(df.squeeze(axis=0), df.iloc[0])
1777+
tm.assert_series_equal(df.squeeze(axis='index'), df.iloc[0])
1778+
tm.assert_series_equal(df.squeeze(axis=1), df.iloc[:, 0])
1779+
tm.assert_series_equal(df.squeeze(axis='columns'), df.iloc[:, 0])
1780+
tm.assert_equal(df.squeeze(), df.iloc[0, 0])
1781+
tm.assertRaises(ValueError, df.squeeze, axis=2)
1782+
tm.assertRaises(ValueError, df.squeeze, axis='x')
1783+
1784+
df = tm.makeTimeDataFrame(3)
1785+
tm.assert_frame_equal(df.squeeze(axis=0), df)
1786+
17731787
def test_numpy_squeeze(self):
17741788
s = tm.makeFloatSeries()
17751789
tm.assert_series_equal(np.squeeze(s), s)
17761790

17771791
df = tm.makeTimeDataFrame().reindex(columns=['A'])
17781792
tm.assert_series_equal(np.squeeze(df), df['A'])
17791793

1780-
msg = "the 'axis' parameter is not supported"
1781-
tm.assertRaisesRegexp(ValueError, msg,
1782-
np.squeeze, s, axis=0)
1783-
17841794
def test_transpose(self):
17851795
msg = (r"transpose\(\) got multiple values for "
17861796
r"keyword argument 'axes'")

0 commit comments

Comments
 (0)