-
-
Notifications
You must be signed in to change notification settings - Fork 18.5k
REF: implement putmask for CI/DTI/TDI/PI #36400
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
Conversation
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.
looks fine, just confirm that we are hitting those lines (not that i trust the coverage thing........)
try: | ||
code_value = self._data._validate_where_value(value) | ||
except (TypeError, ValueError): | ||
return self.astype(object).putmask(mask, value) |
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 is hit in tests?
codes = self._data._ndarray.copy() | ||
np.putmask(codes, mask, code_value) | ||
cat = self._data._from_backing_data(codes) | ||
return type(self)._simple_new(cat, name=self.name) |
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 hit in tests?
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.
looks like we have coverage for all of the datetimelike but none of the categorical; will update
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.
General question. The PR title implies a refactor. but IIUC the overridden putmask behaves differently from the existing base class which casts to object. So being a change in behaviour is this PR aimed at fixing any issues in particular?
@@ -422,6 +422,17 @@ def where(self, cond, other=None): | |||
cat = Categorical(values, dtype=self.dtype) | |||
return type(self)._simple_new(cat, name=self.name) | |||
|
|||
def putmask(self, mask, value): |
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.
not necessarily for today. but is there any value to pushing this down to the array and having a putmask_compat until NEP18 can be supported?
putmask on the Index returns a copy whereas putmask compat on the array would be expected to be inplace. This may not be so easy for Categorical, but for other numpy backed arrays could be more trivial.
also is the goal of extension array backed indexes to allow 3rd party EAs in the Index. If so, putmask on the array would need to be added to the EA interface?
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.
[...] putmask on the array would need to be added to the EA interface?
I would be in favor of 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.
yep I am also +1 on this as this is a 'standard' array method, can you create an issue (we might have one?)
merging but if possible to followon for a) additional testing and b) any perf issues and c) EA api |
Avoids casting to ndarray which in some cases means an object-dtype cast.