|
20 | 20 | from pandas.core.indexes.timedeltas import Timedelta
|
21 | 21 | import pandas.core.nanops as nanops
|
22 | 22 |
|
23 |
| -from pandas.compat import range, zip |
| 23 | +from pandas.compat import range, zip, PY3 |
24 | 24 | from pandas import compat
|
25 | 25 | from pandas.util.testing import (assert_series_equal, assert_almost_equal,
|
26 | 26 | assert_frame_equal, assert_index_equal)
|
@@ -1857,3 +1857,69 @@ def test_op_duplicate_index(self):
|
1857 | 1857 | result = s1 + s2
|
1858 | 1858 | expected = pd.Series([11, 12, np.nan], index=[1, 1, 2])
|
1859 | 1859 | assert_series_equal(result, expected)
|
| 1860 | + |
| 1861 | + def test_argminmax(self): |
| 1862 | + # Series.argmin, Series.argmax are aliased to Series.idxmin, |
| 1863 | + # Series.idxmax |
| 1864 | + |
| 1865 | + # Expected behavior for empty Series |
| 1866 | + s = pd.Series([]) |
| 1867 | + |
| 1868 | + with pytest.raises(ValueError): |
| 1869 | + s.argmin() |
| 1870 | + with pytest.raises(ValueError): |
| 1871 | + s.argmin(skipna=False) |
| 1872 | + with pytest.raises(ValueError): |
| 1873 | + s.argmax() |
| 1874 | + with pytest.raises(ValueError): |
| 1875 | + s.argmax(skipna=False) |
| 1876 | + |
| 1877 | + # For numeric data with NA and Inf (GH #13595) |
| 1878 | + s = pd.Series([0, -np.inf, np.inf, np.nan]) |
| 1879 | + |
| 1880 | + assert s.argmin() == 1 |
| 1881 | + assert np.isnan(s.argmin(skipna=False)) |
| 1882 | + |
| 1883 | + assert s.argmax() == 2 |
| 1884 | + assert np.isnan(s.argmax(skipna=False)) |
| 1885 | + |
| 1886 | + # Using old-style behavior that treats floating point nan, -inf, and |
| 1887 | + # +inf as missing |
| 1888 | + s = pd.Series([0, -np.inf, np.inf, np.nan]) |
| 1889 | + |
| 1890 | + with pd.option_context('mode.use_inf_as_null', True): |
| 1891 | + assert s.argmin() == 0 |
| 1892 | + assert np.isnan(s.argmin(skipna=False)) |
| 1893 | + assert s.argmax() == 0 |
| 1894 | + np.isnan(s.argmax(skipna=False)) |
| 1895 | + |
| 1896 | + # For non-NA strings |
| 1897 | + s = pd.Series(['foo', 'foo', 'bar', 'bar', 'baz']) |
| 1898 | + |
| 1899 | + assert s.argmin() == 2 |
| 1900 | + assert s.argmin(skipna=False) == 2 |
| 1901 | + |
| 1902 | + assert s.argmax() == 0 |
| 1903 | + assert s.argmax(skipna=False) == 0 |
| 1904 | + |
| 1905 | + # For mixed string and NA |
| 1906 | + # This works differently under Python 2 and 3: under Python 2, |
| 1907 | + # comparing strings and None, for example, is valid, and we can |
| 1908 | + # compute an argmax. Under Python 3, such comparisons are not valid |
| 1909 | + # and raise a TypeError. |
| 1910 | + s = pd.Series(['foo', 'foo', 'bar', 'bar', None, np.nan, 'baz']) |
| 1911 | + |
| 1912 | + if PY3: |
| 1913 | + with pytest.raises(TypeError): |
| 1914 | + s.argmin() |
| 1915 | + with pytest.raises(TypeError): |
| 1916 | + s.argmin(skipna=False) |
| 1917 | + with pytest.raises(TypeError): |
| 1918 | + s.argmax() |
| 1919 | + with pytest.raises(TypeError): |
| 1920 | + s.argmax(skipna=False) |
| 1921 | + else: |
| 1922 | + assert s.argmin() == 4 |
| 1923 | + assert np.isnan(s.argmin(skipna=False)) |
| 1924 | + assert s.argmax() == 0 |
| 1925 | + assert np.isnan(s.argmax(skipna=False)) |
0 commit comments