-
-
Notifications
You must be signed in to change notification settings - Fork 18.1k
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
Bug: Logical operator of Series with Index (#22092) #22293
Conversation
makbigc
commented
Aug 12, 2018
•
edited by jreback
Loading
edited by jreback
- closes Bool Ops: One bug hides another #22092
- 1 test added for &, | and ^ logical operator of series
- whatsnew entry
doc/source/whatsnew/v0.24.0.txt
Outdated
@@ -497,6 +497,6 @@ Other | |||
- :meth: `~pandas.io.formats.style.Styler.background_gradient` now takes a ``text_color_threshold`` parameter to automatically lighten the text color based on the luminance of the background color. This improves readability with dark background colors without the need to limit the background colormap range. (:issue:`21258`) | |||
- Require at least 0.28.2 version of ``cython`` to support read-only memoryviews (:issue:`21688`) | |||
- :meth: `~pandas.io.formats.style.Styler.background_gradient` now also supports tablewise application (in addition to rowwise and columnwise) with ``axis=None`` (:issue:`15204`) | |||
- | |||
- Bug in the logical operator of :class:`Series` with :class:`Index` (:issue:`22092`) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Perhaps something like:
Bug in logical operators handling :class:`Series` and :class:`Index` together (:issue:`22092`)
Codecov Report
@@ Coverage Diff @@
## master #22293 +/- ##
=======================================
Coverage 92.16% 92.16%
=======================================
Files 169 169
Lines 50708 50708
=======================================
Hits 46734 46734
Misses 3974 3974
Continue to review full report at Codecov.
|
doc/source/whatsnew/v0.24.0.txt
Outdated
@@ -497,6 +497,6 @@ Other | |||
- :meth: `~pandas.io.formats.style.Styler.background_gradient` now takes a ``text_color_threshold`` parameter to automatically lighten the text color based on the luminance of the background color. This improves readability with dark background colors without the need to limit the background colormap range. (:issue:`21258`) | |||
- Require at least 0.28.2 version of ``cython`` to support read-only memoryviews (:issue:`21688`) | |||
- :meth: `~pandas.io.formats.style.Styler.background_gradient` now also supports tablewise application (in addition to rowwise and columnwise) with ``axis=None`` (:issue:`15204`) | |||
- | |||
- Bug in the logical operators handling :class:`Series` and :class:`Index` together (:issue:`22092`) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Describe the bug briefly. For an example, see #22173.
pandas/core/ops.py
Outdated
@@ -1383,7 +1383,7 @@ def na_op(x, y): | |||
if isinstance(y, list): | |||
y = construct_1d_object_array_from_listlike(y) | |||
|
|||
if isinstance(y, (np.ndarray, ABCSeries)): | |||
if isinstance(y, (np.ndarray, ABCSeries, ABCIndex)): |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This should be ABCIndexClass, not ABCIndex.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Test looks good, some comments on the whatsnew and the edit in core.ops. I'm partial to #22173 for this, but not exactly unbiased there.
@@ -537,6 +537,23 @@ def test_comparison_flex_alignment_fill(self): | |||
exp = pd.Series([True, True, False, False], index=list('abcd')) | |||
assert_series_equal(left.gt(right, fill_value=0), exp) | |||
|
|||
def test_comparison_with_index(self): |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
can you check this on Int64Index as well. I think some other index types might work.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"comparison" is a misnomer here. Consider "binary_ops" or "logical_ops"
idx = Index([True, False, True, False]) | ||
|
||
expected = Series([True, False, False, False]) | ||
result = ser & idx |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
cc @jbrockmendel I think we DO allow this on index types which don't makes sense, but we DO raise on Series, e.g.
not sure what to make of [1] and [2]
In [1]: dti = pd.date_range('20130101', periods=3)
In [2]: dti ^ dti
Out[2]: DatetimeIndex([], dtype='datetime64[ns]', freq=None)
In [3]: dti & dti
Out[3]: DatetimeIndex(['2013-01-01', '2013-01-02', '2013-01-03'], dtype='datetime64[ns]', freq='D')
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
# I think this PR fixes this one?
In [4]: pd.Series(dti) & dti
# this is good
In [5]: pd.Series(dti) & pd.Series(dti)
TypeError: cannot astype a datetimelike from [datetime64[ns]] to [bool]
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think we DO allow this on index types which don't makes sense, but we DO raise on Series,
Yah I've opened a couple of Issues about this. The existing Series ops don't handle dt64/td64 at all, and are not super-clear for some other dtypes. The reversed op(Index, Series)
ops are a separate can of worms because those are set operations.
I don't think this PR fixes [4] (yet), needs to chance ABCIndex to ABCIndexClass (like #22173)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ok this is fine then (for now as you have other issues about this)
Changing from The tests on |
@jreback @jbrockmendel Would you tell me if there is anything to be implemented? Or failing one of the tests does matter? |
doc/source/whatsnew/v0.24.0.txt
Outdated
@@ -497,6 +497,6 @@ Other | |||
- :meth: `~pandas.io.formats.style.Styler.background_gradient` now takes a ``text_color_threshold`` parameter to automatically lighten the text color based on the luminance of the background color. This improves readability with dark background colors without the need to limit the background colormap range. (:issue:`21258`) | |||
- Require at least 0.28.2 version of ``cython`` to support read-only memoryviews (:issue:`21688`) | |||
- :meth: `~pandas.io.formats.style.Styler.background_gradient` now also supports tablewise application (in addition to rowwise and columnwise) with ``axis=None`` (:issue:`15204`) | |||
- | |||
- Logical operation ``&, |, ^`` between :class:`Series` and :class:`Index` will no longer raise ``ValueError`` (:issue:`22092`) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nitpick: pls make "operation" plural
Pending minor comments, LGTM. |
Changed. Thanks for your reply |
ping @jreback Could this be merged? |
ping @jreback @jbrockmendel Is there anything to be implemented before this PR can be merged? |
@makbigc I can't speak for jreback, but rebasing will definitely be necessary |
Hello @makbigc! Thanks for updating the PR.
|
@jreback do you anything else to be implemented? Please tell me. |
looks good, can you rebase, ping on green. |
@jreback changed. No conflict right now. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nice job!
lgtm. @jbrockmendel over to you |
@jbrockmendel ok if ok, pls approve and merge |
…-dev#22293) * Fix bug #GH22092 * Update v0.24.0.txt * Update v0.24.0.txt * Update ops.py * Update test_operators.py * Update v0.24.0.txt * Update test_operators.py
…-dev#22293) * Fix bug #GH22092 * Update v0.24.0.txt * Update v0.24.0.txt * Update ops.py * Update test_operators.py * Update v0.24.0.txt * Update test_operators.py