-
- Notifications
You must be signed in to change notification settings - Fork 19.4k
BUG: Fix bug in loc setitem changing the dtype when condition is False #37672
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
Changes from 5 commits
9df9c89 6e0ec24 26b7dae 11d27b1 a527342 722cf9d 345b3c1 8c57c09 3b92d31 97203de 2f7bf13 eb3b204 9d59de4 b02e629 b27c825 8edc7d0 e57e407 6506df5 8cdef72 c14d7b2 01d7ffc da94459 85120c9 bae602e 824c927 6871ae9 56f4f76 d334c7a f12ef06 131d168 File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||
|---|---|---|---|---|
| | @@ -920,10 +920,11 @@ def setitem(self, indexer, value): | |||
| | ||||
| elif lib.is_scalar(value) and not isna(value): | ||||
| dtype, _ = infer_dtype_from_scalar(value, pandas_dtype=True) | ||||
| | ||||
| elif is_list_like(value) and is_empty_indexer(indexer, np.array(value)): | ||||
| ||||
| for i, idx in enumerate(indexer): |
Ran the tests in indexing, frame/indexing and series/indexing locally, this seems to work. Let me know, if we should move this
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.
you can use np.asarray, also can we check len of the indexer here first to short-cut?
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.
Thx used asarray. Indexer is a tuple containing an empty list, len does not work here unfortunately.
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| | @@ -339,3 +339,10 @@ def test_setitem_boolean_mask(self, mask_type, float_frame): | |
| expected = df.copy() | ||
| expected.values[np.array(mask)] = np.nan | ||
| tm.assert_frame_equal(result, expected) | ||
| | ||
| def test_setitem_only_false_indexer_dtype_changed(self): | ||
| ||
| # GH: 37550 | ||
| df = DataFrame({"a": ["a"], "b": [1], "c": [1]}) | ||
| df.loc[[False], ["b"]] = 10 - df["c"] | ||
| ||
| expected = DataFrame({"a": ["a"], "b": [1], "c": [1]}) | ||
jreback marked this conversation as resolved. Show resolved Hide resolved | ||
| tm.assert_frame_equal(df, expected) | ||
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.
changed -> changing
these should usually be participles
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.
Thx, will follow this in the future