-
-
Notifications
You must be signed in to change notification settings - Fork 18.4k
ENH: Series Mapping na_action=ignore
result is misleading.
#47262
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
Comments
With
will map only values that exist in mapper, leaving other values untouched.
I could see that as a reasonable interpretation when viewing the name alone, but do you have that same expectation from the documentation? |
na_action=ignore
result is misleading. ENH:na_action=ignore
result is misleading.
@rhshadrach
Also one of the examples ("rabbit" is missing) it fills in with a NaN value. I just think that the actual flag is misleading. The label isnt the contents of the can. The ignore flag only really makes sense in terms of the last example where the value is getting passed onto another function or thing. When you are trying to replace items (possibly the more common scenario) it doesn't work as I would expect given the name. |
For what it's worth, I think mappings using the existing value would be more logical to me than replacing it with Nan. But I agree the current behavior is as intended. |
Thinking a bit further, I think it's probably always better to use the >>> import pandas as pd
>>> ser = pd.Series(['calf', 'foal', 'bunny'])
>>> ser.map({'calf':'cow','bunny':'rabbit'}, na_action='ignore')
0 cow
1 NaN
2 rabbit
dtype: object
>>> ser.replace({'calf':'cow','bunny':'rabbit'})
0 cow
1 foal
2 rabbit
dtype: object IMO we should add Thinking even further, should we not just deprecate allowing dict-likes to |
It seems natural for |
Is your feature request related to a problem?
More a misleading flag... When mapping a dictionary to a pandas series and using the
na_action='ignore'
i would expect it to ignore unknown values. Currently it replaces them with an NaN. For example:returns:
Describe the solution you'd like
I would expect it to ignore items that aren't in the dictionary instead of replacing them. I would expect this to be returned:
The current behavior is problematic for large dataframes with many different elements in a series where perhaps you only want to rename some of them. In this case you would have to either do a replace for each one... or make a mapping for every one and hope you didn't miss one.
Describe alternatives you've considered
Trying to differentiate the current action of
ignore
and the action of ignoring-but-not-replacing will be difficult. Perhaps a new value forna_action
ofdont_replace
so that it is very apparent what you are asking to happen with NaNs while keeping the current behavior (albeit confusing) ofignore
.Additional context
Similar-ish to #14210
The text was updated successfully, but these errors were encountered: