Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Fix #60766:.map,.apply would convert element type for extension array #61396

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

Open
wants to merge 9 commits into
base: main
Choose a base branch
Loading
from

Conversation

pedromfdiogo
Copy link
Contributor

@pedromfdiogo pedromfdiogo commented May 3, 2025

The Int32Dtype type allows representing integers with support for null values (pd.NA). However, when using .map(f) or .apply(f), the elements passed to f are converted to float64, and pd.NA is transformed into np.nan.

This happens because .map() and .apply() internally use numpy, which automatically converts the data to float64, even when the original type is Int32Dtype.

The fix (just remove the method to_numpy()) ensures that when using .map() or .apply(), the elements in the series retain their original type (Int32, Float64, boolean, etc.), preventing unnecessary conversions to float64 and ensuring that pd.NA remains correctly handled.

…sion array.

The Int32Dtype type allows representing integers with support for null
values (pd.NA). However, when using .map(f) or .apply(f), the elements
passed to f are converted to float64, and pd.NA is transformed into
np.nan.

This happens because .map() and .apply() internally use numpy, which
automatically converts the data to float64, even when the original type is
Int32Dtype.

The fix (just remove the method to_numpy()) ensures that when using
.map() or .apply(), the elements in the series retain their original type
(Int32, Float64, boolean, etc.), preventing unnecessary conversions to
float64 and ensuring that pd.NA remains correctly handled.
pandas/tests/arrays/masked/test_basemaskedarray_map.py Outdated Show resolved Hide resolved
doc/source/whatsnew/v3.0.0.rst Outdated Show resolved Hide resolved
pandas/tests/arrays/masked/test_basemaskedarray_map.py Outdated Show resolved Hide resolved
pandas/tests/arrays/masked/test_basemaskedarray_map.py Outdated Show resolved Hide resolved
pandas/tests/extension/test_masked.py Outdated Show resolved Hide resolved
@@ -181,10 +187,15 @@ def test_map(self, data_missing, na_action):
def test_map_na_action_ignore(self, data_missing_for_sorting):
zero = data_missing_for_sorting[2]
result = data_missing_for_sorting.map(lambda x: zero, na_action="ignore")

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Better to avoid this unrelated changes

@datapythonista datapythonista added Bug Apply Apply, Aggregate, Transform, Map labels Jun 3, 2025
return x + 1

result = s.map(transform)
expected = Series([2, 3, NA, 5], dtype=result.dtype)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can you be explicit about the expected dtype. i.e. is it Int32?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Apply Apply, Aggregate, Transform, Map Bug
Projects
None yet
Development

Successfully merging this pull request may close these issues.

BUG: .map & .apply would convert element type for extension array.
3 participants
Morty Proxy This is a proxified and sanitized view of the page, visit original site.