-
-
Notifications
You must be signed in to change notification settings - Fork 18.6k
ExtensionArray.Round method and tests #54582
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
base: main
Are you sure you want to change the base?
Conversation
@@ -1094,7 +1094,8 @@ def round(self, decimals: int = 0, *args, **kwargs) -> Self: | |||
DataFrame.round : Round values of a DataFrame. | |||
Series.round : Round values of a Series. | |||
""" | |||
return type(self)(pc.round(self._pa_array, ndigits=decimals)) | |||
result = pc.round(self._pa_array, ndigits=decimals) | |||
return type(self)(result.cast(self._pa_array.type)) |
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.
Why is this cast needed?
|
||
def test_round(self, data): | ||
if not data.dtype._is_numeric or data.dtype._is_boolean: | ||
pytest.skip("Round is only valid for numeric non-boolean dtypes") |
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 test that would raise a TypeError
instead?
pandas/core/arrays/base.py
Outdated
f"Cannot round {type(self)} dtype as it is non-numeric or boolean" | ||
) | ||
return self._from_sequence( | ||
[round(element) if not isna(element) else element for element in 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.
self.isna
or the self.dtype.na_value
should probably be used to check for na instead of isna
this is ready for review again |
Let's do this! |
poke @jbrockmendel |
This pull request is stale because it has been open for thirty days with no activity. Please update and respond to this comment if you're still interested in working on this. |
pandas/core/arrays/base.py
Outdated
# Implementers are encouraged to override this method to avoid | ||
# elementwise rounding. | ||
if self.dtype._is_boolean: | ||
return 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.
should this be a copy?
|
||
def test_round(self, data): | ||
if not data.dtype._is_numeric: | ||
with pytest.raises(TypeError): |
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.
match=...?
doc/source/whatsnew/vX.X.X.rst
file if fixing a bug or adding a new feature.This adds abstract round method in ExtensionOpsMixin to tell EA authors to implement round, and provides a round test.