Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CI: NumPy logical reductions (any, all) fail on DataFrame with NumPy master #19976

Closed
TomAugspurger opened this issue Mar 2, 2018 · 25 comments · Fixed by #21486
Closed

CI: NumPy logical reductions (any, all) fail on DataFrame with NumPy master #19976

TomAugspurger opened this issue Mar 2, 2018 · 25 comments · Fixed by #21486
Labels
Algos Non-arithmetic algos: value_counts, factorize, sorting, isin, clip, shift, diff Blocker Blocking issue or pull request for an upcoming release Dependencies Required and optional dependencies
Milestone

Comments

@TomAugspurger
Copy link
Contributor

TomAugspurger commented Mar 2, 2018

https://travis-ci.org/pandas-dev/pandas/jobs/348215410#L2717

[gw1] linux -- Python 3.6.4 /home/travis/miniconda3/envs/pandas/bin/python
self = <pandas.tests.frame.test_analytics.TestDataFrameAnalytics object at 0x7f86fa5d54a8>
axis = 0
    @pytest.mark.parametrize("axis", [0, 1, None])
    def test_clip_against_frame(self, axis):
        df = DataFrame(np.random.randn(1000, 2))
        lb = DataFrame(np.random.randn(1000, 2))
        ub = lb + 1
    
>       clipped_df = df.clip(lb, ub, axis=axis)
pandas/tests/frame/test_analytics.py:2066: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
pandas/core/generic.py:5605: in clip
    if np.any(pd.isnull(lower)):
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
self = 0    False
1    False
dtype: bool
    def __nonzero__(self):
        raise ValueError("The truth value of a {0} is ambiguous. "
                         "Use a.empty, a.bool(), a.item(), a.any() or a.all()."
>                        .format(self.__class__.__name__))
E       ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
@TomAugspurger TomAugspurger changed the title numpy dev clip CI: Failures against NumPy dev Mar 2, 2018
@TomAugspurger TomAugspurger changed the title CI: Failures against NumPy dev CI: Failures against NumPy dev for test_clip_against_frame Mar 2, 2018
@TomAugspurger TomAugspurger added Algos Non-arithmetic algos: value_counts, factorize, sorting, isin, clip, shift, diff Dependencies Required and optional dependencies labels Mar 2, 2018
@TomAugspurger TomAugspurger added this to the 0.23.0 milestone Mar 2, 2018
jreback added a commit to jreback/pandas that referenced this issue Mar 4, 2018
@TomAugspurger
Copy link
Contributor Author

TomAugspurger commented Mar 6, 2018

In [1]: import pandas as pd

In [2]: import numpy as np

In [3]: np.any(pd.DataFrame({"A": [False], "B": [False]}))
Out[3]:
A    False
B    False
dtype: bool

In [4]: np.__version__
Out[4]: '1.15.0.dev0+400607b'

Out[3] was previously False

Looking through NumPy commits, this was possibly numpy/numpy@b344da9

If I pass keepdims, pandas raises an exception

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-4-94458d898bc2> in <module>()
----> 1 np.any(pd.DataFrame({"A": [False], "B": [False]}), keepdims=False)

~/Envs/pandas-dev/lib/python3.6/site-packages/numpy/numpy/core/fromnumeric.py in any(a, axis, out, keepdims)
   1989
   1990     """
-> 1991     return _wrapreduction(a, np.logical_or, 'any', axis, None, out, keepdims=keepdims)
   1992
   1993

~/Envs/pandas-dev/lib/python3.6/site-packages/numpy/numpy/core/fromnumeric.py in _wrapreduction(obj, ufunc, method, axis, dtype, out, **kwargs)
     79                 return reduction(axis=axis, dtype=dtype, out=out, **passkwargs)
     80             else:
---> 81                 return reduction(axis=axis, out=out, **passkwargs)
     82
     83     return ufunc.reduce(obj, axis, dtype, out, **passkwargs)

~/Envs/pandas-dev/lib/python3.6/site-packages/pandas/pandas/core/generic.py in logical_func(self, axis, bool_only, skipna, level, **kwargs)
   7984     def logical_func(self, axis=None, bool_only=None, skipna=None, level=None,
   7985                      **kwargs):
-> 7986         nv.validate_logical_func(tuple(), kwargs, fname=name)
   7987         if skipna is None:
   7988             skipna = True

~/Envs/pandas-dev/lib/python3.6/site-packages/pandas/pandas/compat/numpy/function.py in __call__(self, args, kwargs, fname, max_fname_arg_count, method)
     48                 validate_args(fname, args, max_fname_arg_count, self.defaults)
     49             elif method == 'kwargs':
---> 50                 validate_kwargs(fname, kwargs, self.defaults)
     51             elif method == 'both':
     52                 validate_args_and_kwargs(fname, args, kwargs,

~/Envs/pandas-dev/lib/python3.6/site-packages/pandas/pandas/util/_validators.py in validate_kwargs(fname, kwargs, compat_args)
    154     """
    155     kwds = kwargs.copy()
--> 156     _check_for_invalid_keys(fname, kwargs, compat_args)
    157     _check_for_default_values(fname, kwds, compat_args)
    158

~/Envs/pandas-dev/lib/python3.6/site-packages/pandas/pandas/util/_validators.py in _check_for_invalid_keys(fname, kwargs, compat_args)
    125         raise TypeError(("{fname}() got an unexpected "
    126                          "keyword argument '{arg}'".
--> 127                          format(fname=fname, arg=bad_arg)))
    128
    129

TypeError: any() got an unexpected keyword argument 'keepdims'

So we're being too strict here.

(cc @hameerabbasi just FYI)

@hameerabbasi
Copy link

hameerabbasi commented Mar 6, 2018

From what I can tell, the failure is because Pandas doesn't realize that ufunc.reduce(...) accepts keepdims (via **kwargs). I may be wrong.

Ideally, something like this should not have occurred, since the function signature for the methods themselves (any, all, etc.) didn't change. However, we did base it on the np.logical_or ufunc instead of the cached methods in numpy/core/_methods.py. This can be reversed if it is super-important, or made to depend on the methods in numpy/core/_methods.py methods again.

@TomAugspurger
Copy link
Contributor Author

From what I can tell, the failure is because Pandas doesn't realize that ufunc.reduce(...) accepts keepdims (via **kwargs). I may be wrong.

Yes I think you're right. We do some keyword argument filtering within pandas itself (@gfyoung I think you know the most about this?)

This can be reversed if it is super-important

I'm not sure. @shoyer do you have thoughts here? I'm not sure what the relative usage of np.any(frame) vs. frame.any is.

Either way, pandas will fix things on our end.

@gfyoung
Copy link
Member

gfyoung commented Mar 6, 2018

@TomAugspurger : Given my previous runarounds with numpy and pandas compatibility, I agree that frame.any would be preferable.

As for keyword argument filtering, we try to keep them as strict as possible so as to prevent extraneous keywords from filtering and discouraging the mixing of the numpy API with pandas objects. So in this case, we were disallowing the keepdims argument, but we could update it to accept when validating.

@shoyer
Copy link
Member

shoyer commented Mar 6, 2018

The problem seems to be that NumPy now checks for any/all methods to defer to, like it's long done for sum, mean, min, max, etc.

On the whole, I think this is more consistent for pandas: np.any and np.all now work like other NumPy aggregation functions when called on pandas objects..

jreback added a commit to jreback/pandas that referenced this issue Mar 7, 2018
jreback added a commit to jreback/pandas that referenced this issue Mar 7, 2018
jreback added a commit that referenced this issue Mar 7, 2018
harisbal added a commit to harisbal/pandas that referenced this issue Mar 12, 2018
commit df2e361
Author: Jeff Reback <jeff@reback.net>
Date:   Sun Mar 11 18:33:25 2018 -0400

    LINT: fixing

commit f1c0b7c
Author: David Polo <delkk0@users.noreply.github.com>
Date:   Sun Mar 11 22:54:27 2018 +0100

    DOC: Improved the docstring of pandas.plotting._core.FramePlotMethods… (pandas-dev#20157)

    * DOC: Improved the docstring of pandas.plotting._core.FramePlotMethods.barh()
    - Added examples section
    - Added extended summary
    - Added argument explanation

    * DOC: Improved the docstring of pandas.plotting._core.FramePlotMethods.barh()
    - Correcting PR comments

    * DOC: Improved the docstring of pandas.plotting._core.FramePlotMethods.barh()
    - Adding defaults for variables.

    * Update reference

commit 0780193
Author: Jonas Schulze <jonas.schulze7@t-online.de>
Date:   Sun Mar 11 22:37:37 2018 +0100

    DOC: update the pandas.DataFrame.plot.density docstring (pandas-dev#20236)

    * DOC: update the pandas.DataFrame.plot.kde and pandas.Series.plot.kde docstrings

    Unfortunately, I was not able to compute a kernel estimate of a
    two-dimensional random variable. Hence, the example is more of an
    analysis of some independent data series.

    * DOC: extract similarities of kde docstrings

    The `DataFrame.plot.kde` and `Series.plot.kde` now use a common
    docstring, for which the differences are inserted.

commit 2718984
Author: Cihan Ceyhan <chncyhn@gmail.com>
Date:   Sun Mar 11 21:48:08 2018 +0100

    DOC: Update the pandas.Series.dt.round/floor/ceil docstrings (pandas-dev#20187)

    * DOC: Update the pandas.Series.dt.round/floor/ceil docstrings

    * DOC: review points fixed.

    * Add series

commit 0d86742
Author: Antonio Molina <aydevosotros@gmail.com>
Date:   Sun Mar 11 18:57:37 2018 +0100

    DOC: Improved pandas.plotting.bootstrap_plot docstring (pandas-dev#20166)

    * Improved documentation on bootstrap_plot

    * Improved documentation on bootstrap_plot

    * Doc bootstrap_plot: Fixed some comments on pull requests

    * Added reference to wikipedia

    * Changed kwds for **kwds

    * Removed ** from kwds becuase of validation iuses

    * Fixed forgotten break line. I think that the kwds paramater now fits what expected @TomAugspurger. If not, sorry and indicate how it should be

    * Fixed warnings on compilation

    * Moved reference to extended description

commit a2910ad
Author: András Novoszáth <nocibambi@gmail.com>
Date:   Sun Mar 11 18:56:01 2018 +0100

    DOC: update the Index.get_values docstring (pandas-dev#20231)

    * DOC: update the Index.get_values docstring

    * Corrections

    * Corrected extended summary and quotes

    * Correcting spaces, extended summary, multiIndex example

    * See also correction

    * Multi ndim

commit afa6c42
Author: Marc <mlafore05@gmail.com>
Date:   Sun Mar 11 10:42:35 2018 -0400

    DOC: update the pandas.DataFrame.all docstring (pandas-dev#20216)

commit a44bae3
Author: Victor Villas <villasv@outlook.com>
Date:   Sun Mar 11 11:41:12 2018 -0300

    DOC: update the Series.view docstring (pandas-dev#20220)

commit 233103f
Author: David Adrián Cañones Castellano <davidarcano@gmail.com>
Date:   Sun Mar 11 15:40:02 2018 +0100

    DOC: update the docstring of pandas.DataFrame.from_dict (pandas-dev#20259)

commit 62bddec
Author: csfarkas <csaba.farkas95@gmail.com>
Date:   Sun Mar 11 15:33:54 2018 +0100

    DOC: add docstring for Index.get_duplicates (pandas-dev#20223)

commit 8c77238
Author: adatasetaday <32177771+adatasetaday@users.noreply.github.com>
Date:   Sun Mar 11 10:17:05 2018 -0400

    Docstring pandas.series.diff (pandas-dev#20238)

commit 4271757
Author: Aly Sivji <4369343+alysivji@users.noreply.github.com>
Date:   Sun Mar 11 08:51:25 2018 -0500

    DOC: update `pandas/core/ops.py` docstring template to accept examples (pandas-dev#20246)

commit 080ef0c
Author: akosel <aaronjkosel@gmail.com>
Date:   Sun Mar 11 12:43:10 2018 +0000

    DOC: update the DataFrame.iat[] docstring (pandas-dev#20219)

    * DOC: update the DataFrame.iat[] docstring

    * Update based on PR comments

    * Update based on PR comments

    * Singular not plural

    * Update to account for use with Series. Add example using Series.

    * Update indexing.py

    * PEP8

commit 302fda4
Author: adatasetaday <32177771+adatasetaday@users.noreply.github.com>
Date:   Sun Mar 11 08:36:21 2018 -0400

    DOC: update the pandas.DataFrame.diff docstring (pandas-dev#20227)

    * DOC: update the pandas.DataFrame.diff  docstring

    * DOC: update the pandas.DataFrame.diff docstring

    * DOC: update the pandas.DataFrame.diff docstring

    * DOC: update the pandas.DataFrame.diff docstring

    * DOC: update the pandas.DataFrame.diff docstring

    * DOC: update the pandas.DataFrame.diff  docstring

    * DOC: update the pandas.DataFrame.diff  docstring

    * DOC: update the pandas.DataFrame.diff  docstring

    * DOC: update the pandas.DataFrame.diff docstring

    * Cleanup

commit c791a84
Author: Pietro Battiston <me@pietrobattiston.it>
Date:   Sun Mar 11 13:07:01 2018 +0100

    DOC: pd.core.window.Expanding.kurt docstring (split from pd.core.Rolling.kurt) (pandas-dev#20064)

commit b3d6ce6
Author: Nipun Sadvilkar <nipunsadvilkar@gmail.com>
Date:   Sun Mar 11 17:29:33 2018 +0530

    DOC: update the pandas.date_range() docstring (pandas-dev#20143)

    * DOC: Improved the docstring of pandas.date_range()

    * Change date strings to iso format

    * Removed import pands in Examples docstring

    * Add See Also Docstring

    * Update datetimes.py

    * Doctests

commit 6d7272a
Author: Samuel Sinayoko <samuelsinayoko@bmlltech.com>
Date:   Sun Mar 11 11:58:09 2018 +0000

    DOC: update DataFrame.to_records (pandas-dev#20191)

    * Update to_records docstring.

    - Minor changes (missing dots, newlines) to make tests pass.
    - More examples.

    * Fix html docs.

    Missing newlines.

    * Reword datetime type information.

    * flake8 errors

    * Fix typo (duplicated type)

    * Remove unwanted blank line after Examples.

    * Fix doctests.

    ```
    (pandas_dev) sinayoks@landade:~/dev/pandas/ $ pytest --doctest-modules pandas/core/frame.py -k to_record
    ========================================================================================== test session starts ==========================================================================================
    platform darwin -- Python 3.6.4, pytest-3.4.2, py-1.5.2, pluggy-0.6.0
    rootdir: /Users/sinayoks/dev/pandas, inifile: setup.cfg
    plugins: xdist-1.22.1, forked-0.2, cov-2.5.1
    collected 43 items

    pandas/core/frame.py .                                                                                                                                                                            [100%]

    ========================================================================================== 42 tests deselected ==========================================================================================
    ```

    * Few more changes

commit 636335a
Author: Gabriel de Maeztu <gabriel.maeztu@gmail.com>
Date:   Sun Mar 11 12:56:48 2018 +0100

    DOC: Improved the docstring of pandas.plotting.radviz (pandas-dev#20169)

commit fbebc7f
Author: jen w <j.e.weiss@gmail.com>
Date:   Sun Mar 11 06:50:54 2018 -0500

    DOC: Update pandas.DataFrame.tail docstring (pandas-dev#20225)

commit c2864d7
Author: Stephen Childs <sechilds@gmail.com>
Date:   Sun Mar 11 07:50:39 2018 -0400

    DOC: update the DataFrame.cov docstring (pandas-dev#20245)

    * DOC: Revise docstring of DataFrame cov method

    Update the docstring with some examples from
    elsewhere in the pandas documentation.

    Some of the examples use randomly generated time series
    because we need to get covariance between long series.
    Used a random seed to ensure that the results are the
    same each time.

    * DOC: Fix See Also and min_periods explanation.

    Responding to comments on PR. See also section will link
    properly and number of periods explanation clearer.

commit 90e31b9
Author: jen w <j.e.weiss@gmail.com>
Date:   Sun Mar 11 06:50:18 2018 -0500

    DOC: update pandas.DataFrame.head docstring (pandas-dev#20262)

commit fb556ed
Author: Israel Saeta Pérez <dukebody@gmail.com>
Date:   Sat Mar 10 22:33:42 2018 +0100

    DOC: Improve pandas.Series.plot.kde docstring and kwargs rewording for whole file (pandas-dev#20041)

commit c3d491a
Author: Andy R. Terrel <andy.terrel@gmail.com>
Date:   Sat Mar 10 11:48:13 2018 -0800

    DOC: update the DataFrame.head()  docstring (pandas-dev#20206)

commit dd7f567
Author: DataOmbudsman <DataOmbudsman@users.noreply.github.com>
Date:   Sat Mar 10 20:15:48 2018 +0100

    DOC: update the Index.shift docstring (pandas-dev#20192)

    * DOC: updating docstring of Index.shift

    * Add See Also section to shift

    * Update link to Series.shift

commit 5b0caf4
Author: Eric O. LEBIGOT (EOL) <lebigot@users.noreply.github.com>
Date:   Sat Mar 10 17:32:20 2018 +0100

    DOC: update the Series.memory_usage() docstring (pandas-dev#20086)

commit 9fb7ac9
Author: Carol Willing <carolcode@willingconsulting.com>
Date:   Sat Mar 10 08:28:54 2018 -0800

    DOC: Edit contributing to docs section (pandas-dev#20190)

commit d8181a5
Author: DaanVanHauwermeiren <DaanVanHauwermeiren@users.noreply.github.com>
Date:   Sat Mar 10 17:25:20 2018 +0100

    DOC: update the Series.isin docstring (pandas-dev#20175)

commit ec631ce
Author: Riccardo Magliocchetti <riccardo.magliocchetti@gmail.com>
Date:   Sat Mar 10 17:12:41 2018 +0100

    DOC: update the pandas.Series.tail docstring (pandas-dev#20176)

commit e5e4ae9
Author: DaanVanHauwermeiren <DaanVanHauwermeiren@users.noreply.github.com>
Date:   Sat Mar 10 16:41:58 2018 +0100

    DOC: update the pandas.Index.drop_duplicates and pandas.Series.drop_duplicates docstring (pandas-dev#20114)

commit d7bcb22
Author: Riccardo Magliocchetti <riccardo.magliocchetti@gmail.com>
Date:   Sat Mar 10 15:49:31 2018 +0100

    DOC: update the MultiIndex.swaplevel docstring (pandas-dev#20105)

commit 8497029
Author: Gjelt <math-and-data@users.noreply.github.com>
Date:   Sat Mar 10 15:41:17 2018 +0100

    DOC: Improved the docstring of pandas.DataFrame.values (pandas-dev#20065)

commit 840d432
Author: Jordi Contestí <25779507+jcontesti@users.noreply.github.com>
Date:   Sat Mar 10 13:24:35 2018 +0100

    DOC: Improved the docstring of Series.str.findall (pandas-dev#19982)

commit 2a0d23b
Author: Jeff Reback <jeff@reback.net>
Date:   Sat Mar 10 06:54:19 2018 -0500

    DOC: lint

commit bf0dcb5
Author: Kate Surta <kate.surta@gmail.com>
Date:   Sat Mar 10 14:42:52 2018 +0300

    BUG: Check for wrong arguments in index subclasses constructors (pandas-dev#20017)

commit 4131149
Author: Stijn Van Hoey <stijnvanhoey@gmail.com>
Date:   Sat Mar 10 10:15:41 2018 +0100

    DOC: Extend docstring pandas core index to_frame method (pandas-dev#20036)

commit 52cffa3
Author: William Ayd <william.ayd@icloud.com>
Date:   Fri Mar 9 18:06:43 2018 -0800

    Cythonized GroupBy pct_change (pandas-dev#19919)

commit da6f827
Author: William Ayd <william.ayd@icloud.com>
Date:   Fri Mar 9 18:03:50 2018 -0800

    Refactored GroupBy ASVs (pandas-dev#20043)

commit bd31f71
Author: William Ayd <william.ayd@icloud.com>
Date:   Fri Mar 9 17:53:34 2018 -0800

    Added 'displayed_only' option to 'read_html' (pandas-dev#20047)

commit ed96567
Author: Ksenia <bobrovaksenia@gmail.com>
Date:   Sat Mar 10 02:40:10 2018 +0100

    TST: series/indexing tests parametrization + moving test methods (pandas-dev#20059)

commit 7c14e4f
Author: Kyle Barron <kylebarron2@gmail.com>
Date:   Fri Mar 9 11:31:14 2018 -0500

    DOC: Add syntax highlighting to SAS code blocks in comparison_with_sas.rst (pandas-dev#20080)

    * Add syntax highlighting to SAS code blocks

    * Fix typo

commit 731d971
Author: Matthew Roeschke <emailformattr@gmail.com>
Date:   Fri Mar 9 03:30:22 2018 -0800

    Fix typo in apply.py (pandas-dev#20058)

commit cc1b934
Author: Matthew Roeschke <emailformattr@gmail.com>
Date:   Fri Mar 9 03:13:50 2018 -0800

    BUG: Retain timezone dtype with cut and qcut (pandas-dev#19890)

commit c730d08
Author: William Ayd <william.ayd@icloud.com>
Date:   Fri Mar 9 02:37:27 2018 -0800

    DOC: Update Kurt Docstr (pandas-dev#20044)

commit 9119d07
Author: Joris Van den Bossche <jorisvandenbossche@gmail.com>
Date:   Fri Mar 9 10:03:44 2018 +0100

    Temporary github PR template for sprint (pandas-dev#20055)

commit 747501a
Author: Aly Sivji <4369343+alysivji@users.noreply.github.com>
Date:   Fri Mar 9 02:19:59 2018 -0600

    DOC: Improve docstring for pandas.Index.repeat (pandas-dev#19985)

commit 1d73cf3
Author: Rouz Azari <rouzazari@users.noreply.github.com>
Date:   Thu Mar 8 16:54:53 2018 -0800

    BUG: Dense ranking with percent now uses 100% basis (pandas-dev#15639)

commit f9fd540
Author: William Ayd <william.ayd@icloud.com>
Date:   Thu Mar 8 16:36:23 2018 -0800

    Added flake8 to DEV requirements (pandas-dev#20063)

commit b669112
Author: Joris Van den Bossche <jorisvandenbossche@gmail.com>
Date:   Thu Mar 8 14:09:12 2018 +0100

    DOC: require returns section in validation script (pandas-dev#19994)

commit 024d8b4
Author: Jeff Reback <jeff@reback.net>
Date:   Thu Mar 8 07:08:57 2018 -0500

    TST: xfail test_time on py2 & mpl 1.4.3 (pandas-dev#20053)

commit b85f6c1
Author: Marc Garcia <garcia.marc@gmail.com>
Date:   Thu Mar 8 11:07:08 2018 +0000

    DOC: update docstring validation script + replace api coverage script (pandas-dev#20025)

    * Improvments to validate_docstrings script: adding sections to summary, validating type and description of parameters

    * DOC: Improvements to validate docstring script (added api_coverage functionality, sections in csv and extra validations)

commit 9273bf5
Author: Joris Van den Bossche <jorisvandenbossche@gmail.com>
Date:   Thu Mar 8 11:14:05 2018 +0100

    DOC/CI: temp pin matplotlib for doc build (pandas-dev#20045)

commit 63ce781
Author: Jeff Reback <jeff@reback.net>
Date:   Wed Mar 7 17:01:38 2018 -0500

    TST: xfail mpl 2.2 tests

    xref pandas-dev#20031

commit 7c7bd56
Author: Daniel Frank <danfrankj@gmail.com>
Date:   Wed Mar 7 13:54:46 2018 -0800

    enable multivalues insert (pandas-dev#19664)

commit f33e84c
Author: Ksenia <bobrovaksenia@gmail.com>
Date:   Wed Mar 7 22:09:42 2018 +0100

    Moving tests in series/indexing to fixtures (pandas-dev#20014.1) (pandas-dev#20034)

commit 2532a49
Author: Liam3851 <david.krych@gmail.com>
Date:   Wed Mar 7 13:04:22 2018 -0500

    BUG: Fixes to msgpack support. (pandas-dev#19975)

commit fd010de
Author: Guilherme Beltramini <guilherme.beltramini@nubank.com.br>
Date:   Wed Mar 7 11:33:09 2018 -0300

    to_sql also accepts Series (pandas-dev#20004)

commit 8d462ed
Author: Paul Reidy <paul_reidy@outlook.com>
Date:   Wed Mar 7 14:32:12 2018 +0000

    EHN: Implement method argument for DataFrame.replace (pandas-dev#19894)

commit d14fae8
Author: jbrockmendel <jbrockmendel@gmail.com>
Date:   Wed Mar 7 06:19:21 2018 -0800

    cleanup ops (pandas-dev#19972)

commit 776f2be
Author: William Ayd <william.ayd@icloud.com>
Date:   Wed Mar 7 05:59:39 2018 -0800

    Added .pytest_cache to gitignore (pandas-dev#20021)

commit 460941f
Author: jschendel <jschendel@users.noreply.github.com>
Date:   Wed Mar 7 06:57:51 2018 -0700

    Fix typos in test_interval_new (pandas-dev#20026)

commit 5782ab8
Author: Joris Van den Bossche <jorisvandenbossche@gmail.com>
Date:   Wed Mar 7 14:57:17 2018 +0100

    DOC: enable matplotlib plot_directive to include figures in docstrings (pandas-dev#20015)

commit dd2b224
Author: DataOmbudsman <DataOmbudsman@users.noreply.github.com>
Date:   Wed Mar 7 14:56:49 2018 +0100

    DOC: updating docstring of Index.shift (pandas-dev#19996)

commit 09c416c
Author: William Ayd <william.ayd@icloud.com>
Date:   Wed Mar 7 05:56:16 2018 -0800

    DOC: Updated kurt docstring (for pandas sprint) (pandas-dev#19999)

commit ad15f80
Author: Kate Surta <kate.surta@gmail.com>
Date:   Wed Mar 7 16:55:48 2018 +0300

    TST: Fix wrong argument in TestDataFrameAlterAxes.test_set_index_dst (pandas-dev#20019)

commit f6ee9ac
Author: Jeff Reback <jeff@reback.net>
Date:   Wed Mar 7 08:55:33 2018 -0500

    TST: xfail clip tests under numpy-dev (pandas-dev#20035)

    xref pandas-dev#19976

commit 397e296
Author: Jeff Reback <jeff@reback.net>
Date:   Wed Mar 7 08:15:49 2018 -0500

    TST: xfail some tests for mpl 2.2 compat (pandas-dev#20033)

    xref pandas-dev#20031

commit 56939b4
Author: luzpaz <luzpaz@users.noreply.github.com>
Date:   Wed Mar 7 06:10:39 2018 -0500

    DOC: misc typos (pandas-dev#20029)

commit 01b91c2
Author: alinde1 <32714875+alinde1@users.noreply.github.com>
Date:   Tue Mar 6 22:47:45 2018 +0100

    DOC: is confusing for ddof parameter of sem, var and std functions (pandas-dev#19986)

commit db82165
Author: Joris Van den Bossche <jorisvandenbossche@gmail.com>
Date:   Tue Mar 6 22:42:41 2018 +0100

    CLN/DOC: cache_readonly: remove allow_setting + preserve docstring (pandas-dev#19991)

commit e02f737
Author: Tom Augspurger <TomAugspurger@users.noreply.github.com>
Date:   Tue Mar 6 09:38:32 2018 -0600

    DOC: add doc on ExtensionArray and extending pandas (pandas-dev#19936)

commit 0ca77b3
Author: jbrockmendel <jbrockmendel@gmail.com>
Date:   Tue Mar 6 04:27:21 2018 -0800

    Datetimelike add/sub catch cases more explicitly, tests (pandas-dev#19912)

commit 0038bad
Author: Matthew Roeschke <emailformattr@gmail.com>
Date:   Tue Mar 6 04:25:55 2018 -0800

    month_name/day_name warnings followup (pandas-dev#20010)

commit fd63c90
Author: Ksenia <bobrovaksenia@gmail.com>
Date:   Tue Mar 6 13:25:37 2018 +0100

    TST: split series/test_indexing.py (pandas-dev#18614) (pandas-dev#20006)

commit 6366bf0
Author: Jeff Reback <jeff@reback.net>
Date:   Tue Mar 6 07:25:17 2018 -0500

    TST: clean deprecation warnings for xref pandas-dev#19980 (pandas-dev#20013)

    xfail some mpl > 2.1.2 tests

commit fe61299
Author: William Ayd <william.ayd@icloud.com>
Date:   Tue Mar 6 00:30:13 2018 -0800

    DOC: fixed dynamic import mechanics of make.py (pandas-dev#20005)

commit 8a084eb
Author: Grant Smith <grantsmith@gmail.com>
Date:   Tue Mar 6 03:29:26 2018 -0500

    CLN: deprecate the pandas.tseries.plotting.tsplot function (GH18627) (pandas-dev#19980)

commit aedbd94
Author: Jeff Reback <jeff@reback.net>
Date:   Mon Mar 5 06:36:41 2018 -0500

    TST: text correction, xref pandas-dev#19987

commit cbffd19
Author: Bhavesh Poddar <bhavesh13103507@gmail.com>
Date:   Mon Mar 5 06:34:59 2018 -0500

    fixed pytest deprecation warning (pandas-dev#19987)

commit 058a16c
Author: Matthew Roeschke <emailformattr@gmail.com>
Date:   Mon Mar 5 03:23:49 2018 -0800

    CLN: Use generators in builtin functions (pandas-dev#19989)

commit 607910b
Author: Matthew Roeschke <emailformattr@gmail.com>
Date:   Sun Mar 4 12:15:37 2018 -0800

    Add month names (pandas-dev#18164)

commit 2fad756
Author: jbrockmendel <jbrockmendel@gmail.com>
Date:   Sun Mar 4 12:00:39 2018 -0800

    transition period_helper to use pandas_datetimestruct (pandas-dev#19918)

commit 53606ff
Author: Liam3851 <david.krych@gmail.com>
Date:   Sun Mar 4 14:58:22 2018 -0500

    BUG: Compat for pre-0.20 TimedeltaIndex and Float64Index pickles pandas-dev#19939 (pandas-dev#19943)

commit 0bfb61b
Author: Joris Van den Bossche <jorisvandenbossche@gmail.com>
Date:   Fri Mar 2 22:35:45 2018 +0100

    DOC: small updates to make.py script (pandas-dev#19951)

    * enable passing verbosity flag to sphinx

    * alias api for api.rst

commit d1f3689
Author: Joris Van den Bossche <jorisvandenbossche@gmail.com>
Date:   Fri Mar 2 22:33:48 2018 +0100

     DOC: fix some sphinx syntax warnings  (pandas-dev#19962)

commit 49f09cc
Author: Tom Augspurger <TomAugspurger@users.noreply.github.com>
Date:   Fri Mar 2 15:20:28 2018 -0600

    API: Added ExtensionArray constructor from scalars (pandas-dev#19913)

commit d30d165
Author: Joris Van den Bossche <jorisvandenbossche@gmail.com>
Date:   Fri Mar 2 22:18:10 2018 +0100

    DOC: update docstring validation script (pandas-dev#19960)

commit a7a7f8c
Author: Joris Van den Bossche <jorisvandenbossche@gmail.com>
Date:   Fri Mar 2 13:49:59 2018 +0100

    DOC: clarify version of ActivePython that includes pandas (pandas-dev#19964)

commit b167483
Author: Gina <Dr-G@users.noreply.github.com>
Date:   Fri Mar 2 05:33:49 2018 -0600

    DOC: update install.rst to include ActivePython distribution (pandas-dev#19908)

commit e6c7dea
Author: topper-123 <terji78@gmail.com>
Date:   Fri Mar 2 11:19:07 2018 +0000

    ENH: Let initialisation from dicts use insertion order for python >= 3.6 (part III) (pandas-dev#19884)

commit d615f86
Author: Marc Garcia <garcia.marc@gmail.com>
Date:   Fri Mar 2 09:39:45 2018 +0000

    DOC: Adding script to validate docstrings, and generate list of all functions/methods with state (pandas-dev#19898)

commit 5f271eb
Author: Yian <yian.shang@gmail.com>
Date:   Fri Mar 2 00:13:58 2018 +0100

    BUG: Adding skipna as an option to groupby cumsum and cumprod (pandas-dev#19914)

commit 072545d
Author: David C Hall <davidchall@users.noreply.github.com>
Date:   Thu Mar 1 15:06:20 2018 -0800

    ENH: Add option to disable MathJax (pandas-dev#19824). (pandas-dev#19856)

commit d44a6ec
Author: Yian <yian.shang@gmail.com>
Date:   Fri Mar 2 00:02:31 2018 +0100

    Making to_datetime('today') and Timestamp('today') consistent (pandas-dev#19937)

commit 87fefe2
Author: jbrockmendel <jbrockmendel@gmail.com>
Date:   Thu Mar 1 14:54:42 2018 -0800

    dispatch Series[datetime64] comparison ops to DatetimeIndex (pandas-dev#19800)

commit 9242248
Author: Matthew Roeschke <emailformattr@gmail.com>
Date:   Thu Mar 1 14:50:35 2018 -0800

    BUG: DataFrame.diff(axis=0) with DatetimeTZ data (pandas-dev#19773)

commit c5a1ef1
Author: Joris Van den Bossche <jorisvandenbossche@gmail.com>
Date:   Thu Mar 1 22:48:39 2018 +0100

    DOC: remove empty attribute/method lists from class docstrings html page (pandas-dev#19949)

commit 9958ce6
Author: jschendel <jschendel@users.noreply.github.com>
Date:   Thu Mar 1 04:14:19 2018 -0700

    BUG: Preserve column metadata with DataFrame.astype (pandas-dev#19948)

commit 3b4eb8d
Author: Joris Van den Bossche <jorisvandenbossche@gmail.com>
Date:   Thu Mar 1 12:12:35 2018 +0100

    CLN: remove redundant clean_fill_method calls (pandas-dev#19947)

commit c8859b5
Author: Joris Van den Bossche <jorisvandenbossche@gmail.com>
Date:   Thu Mar 1 10:35:05 2018 +0100

    DOC: script to build single docstring page (pandas-dev#19840)

commit 52559f5
Author: Matthew Roeschke <emailformattr@gmail.com>
Date:   Wed Feb 28 17:32:24 2018 -0800

    ENH: Allow Timestamp to accept Nanosecond argument (pandas-dev#19889)

commit 4a27697
Author: William Ayd <william.ayd@icloud.com>
Date:   Wed Feb 28 17:30:18 2018 -0800

    Cythonized GroupBy any (pandas-dev#19722)

commit 96b8bb1
Author: jschendel <jschendel@users.noreply.github.com>
Date:   Wed Feb 28 18:07:15 2018 -0700

    ENH: Implement DataFrame.astype('category') (pandas-dev#18099)

commit 6ef4be3
Author: Liam3851 <david.krych@gmail.com>
Date:   Wed Feb 28 06:14:11 2018 -0500

    ENH: Allow literal (non-regex) replacement using .str.replace pandas-dev#16808 (pandas-dev#19584)

commit 318a287
Author: README Bot <35302948+codetriage-readme-bot@users.noreply.github.com>
Date:   Wed Feb 28 05:07:28 2018 -0600

    Add CodeTriage badge to pandas-dev/pandas (pandas-dev#19928)

    Adds a badge showing the number of people helping this repo on CodeTriage.

commit 14a38a6
Author: Chris Catalfo <ccatalfo@users.noreply.github.com>
Date:   Wed Feb 28 03:14:23 2018 -0500

    DOC: fixes pipe example in basics.rst due to statsmodel changes (pandas-dev#19923)

commit dfe9d4a
Author: Phil Ngo <ngo.phil@gmail.com>
Date:   Wed Feb 28 00:05:56 2018 -0800

    DOC: fix Series.reset_index example (pandas-dev#19930)

commit 9bdc5c8
Author: William Ayd <william.ayd@icloud.com>
Date:   Tue Feb 27 16:16:48 2018 -0800

    Consistent Timedelta Writing for all Excel Engines (pandas-dev#19921)

commit 61211a8
Author: jbrockmendel <jbrockmendel@gmail.com>
Date:   Tue Feb 27 16:11:47 2018 -0800

    Assorted _libs cleanups (pandas-dev#19887)
@TomAugspurger TomAugspurger added the Blocker Blocking issue or pull request for an upcoming release label Mar 12, 2018
@TomAugspurger TomAugspurger changed the title CI: Failures against NumPy dev for test_clip_against_frame CI: NumPy logical reductions (any, all) fail on DataFrame with NumPy master Mar 12, 2018
pandres pushed a commit to pandres/pandas that referenced this issue Mar 15, 2018
@TomAugspurger
Copy link
Contributor Author

I'm not sure how to proceed here. I would like to ensure that np.all(dataframe) continues to work like before. It'd be a shame to break that, as that was a reasonable way to get a scalar boolean from a dataframe.

However, this conflicts with NumPy's (reasonable) expectation that np.all(thing, **kwargs) matches thing.all(**kwargs). In the past that's differed since np.all used to reduce a DataFrame to a scalar, while DataFrame.all reduced to a Series.

AFAICT, even implementing keepdims for DataFrame.all/any won't solve the issue, since our default is different.

@hameerabbasi
Copy link

hameerabbasi commented Apr 12, 2018

Looping in @eric-wieser here. Eric, would it be reasonable to just make it so that (for any and all), getattr is not called like it is now (as it wasn't being called before)? Or possibly give priority to the ufunc over the attribute call (I'm not sure if that will fix this).

Edit: Semi-relevant xkcd: https://xkcd.com/1172/

@jorisvandenbossche
Copy link
Member

A possible option would be to implement df.any(axis=None) to actually reduce over all dimensions? Or does numpy not pass axis=None to df.any(..)? But, that would of course also make it inconsistent with the rest of pandas.
(currently I think the main reason the default is axis=None but interpreted as axis=0 for both series and dataframe, is only Panel. But since that is deprecated, I think we can ignore consistency with Panel)

@hameerabbasi
Copy link

hameerabbasi commented Apr 13, 2018

Yes, that would be best. df.any() has a default axis of maybe 0/1 (I'm not sure what's appropriate here), but np.any usually passes axis=None by default, thus achieving the desired behavior. Alternatively, you can create a sentinel PdAxis (which would be invalid with np.any) to signify that this is coming from Pandas.

In fact, this is how ufunc.reduce works, default is axis=0 but sum/prod/any/all override it to None.

In fact, if DataFrame already implements __array_ufunc__ or similar, df.all etc can just defer to that rather than duplicating code.

@jreback
Copy link
Contributor

jreback commented Apr 13, 2018

A possible option would be to implement df.any(axis=None) to actually reduce over all dimensions?

-1 on this. We don't use None as a valid parameter anywhere else and would be inconsistent. ok with using a signaling object (rather than None) so that np.any works (as current) though.

@hameerabbasi
Copy link

@jreback The issue here is that Numpy itself passes axis=None. It definitely does this for sum/prod. The thing that changed is that now it does this for any and all too.

@jorisvandenbossche
Copy link
Member

Accepting None temporarily as a valid value (and which is not overridden by the implicit default of 0) makes it possible to actually deprecate this, without having the hard breakage as we see now in this issue.

@TomAugspurger
Copy link
Contributor Author

I don't think I'll get to this for 0.23.0

@TomAugspurger TomAugspurger modified the milestones: 0.23.0, 0.23.1 Apr 30, 2018
@jorisvandenbossche
Copy link
Member

Personally, for now accepting axis=None as backwards compatibility, should be a rather easy short-term solution. That way we can discuss later the long term solution that we want (a long term deprecation would probably have the same short-term solution as temporary backwards compatibility)

@hameerabbasi
Copy link

Wouldn't having the same solution as sum/prod be acceptable? I'm not too familiar with Pandas but sounds like it should be handled the same way now, as it is in Numpy?

@jreback jreback modified the milestones: 0.23.1, 0.23.2 Jun 7, 2018
@TomAugspurger
Copy link
Contributor Author

TomAugspurger commented Jun 7, 2018

Personally, for now accepting axis=None as backwards compatibility, should be a rather easy short-term solution.

I'd like to do this for 0.23.1. I have a PR mostly ready.

@TomAugspurger
Copy link
Contributor Author

Quick status update: I have this mostly working so that np.all(df) has the previous behavior (reducing to a scalar). It allows DataFrame.all(axis=None) to mean reduce all axes. I can push these changes up now, but would it be strange for only the logical reductions to support axis=None, while for the other reductions axis=None means reduce the stat axis?

Is there a planned release date for NumPy 1.15?

@jorisvandenbossche
Copy link
Member

can push these changes up now, but would it be strange for only the logical reductions to support axis=None, while for the other reductions axis=None means reduce the stat axis?

That is strange, but maybe something we can leave for after 0.23.1 to discuss/change ?

@gfyoung
Copy link
Member

gfyoung commented Jun 11, 2018

Is there a planned release date for NumPy 1.15?

@TomAugspurger : FWIW, probably not for some time. 1.14.4 just came out 5 days ago, and they also do candidate releases before an official major release.

I agree with @jorisvandenbossche to leave for after 0.23.1.

@TomAugspurger
Copy link
Contributor Author

OK there's talk on the NumPy ML of 1.15 rcs coming up soon so I'm going to finish this today.


One question: DataFrame works around NumPy's object behavior:

In [4]: pd.DataFrame({"A": ['a', 'b'], 'B': ['c', 'd']}).all()
Out[4]:
A    True
B    True
dtype: bool

But we don't do that for Series.

In [7]: pd.Series(['a', 'b']).all()
Out[7]: 'b'

Do we want to clean this all up at once?

@hameerabbasi
Copy link

would it be strange for only the logical reductions to support axis=None, while for the other reductions axis=None means reduce the stat axis?

The interpretation of axis=None is up to the implementer. What's weird us, ufunc.reduce(...) defaults to the axis=0 behavior ("across the first axis"), and NumPy usually interprets axis=None to mean "across all axes".

Though, if you so wish, you can make it mean something else. I'd say you should set axis=None to mean whatever you wish for the default to be.

@TomAugspurger
Copy link
Contributor Author

Just to be clear, we'll follow NumPy's behavior of axis=None meaning reduce across all axes, 0 for first axis, etc. The difference is the defaults. The pandas methods will default to axis=0, NumPy will default to axis=None.

@jorisvandenbossche
Copy link
Member

Do we want to clean this all up at once?

Let's maybe keep that for 0.24.0 ?

Do you have a PR to review for this?

@TomAugspurger
Copy link
Contributor Author

Later today hopefully.

@TomAugspurger
Copy link
Contributor Author

PR at #21486

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Algos Non-arithmetic algos: value_counts, factorize, sorting, isin, clip, shift, diff Blocker Blocking issue or pull request for an upcoming release Dependencies Required and optional dependencies
Projects
None yet
Development

Successfully merging a pull request may close this issue.

6 participants