Skip to content

BUG: Series[int].loc setitem with Series[int] results in Series[float] #41644

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

Merged
merged 5 commits into from
Jun 8, 2021

Conversation

simonjayhawkins
Copy link
Member

>>> pd.__version__
'1.3.0.dev0+1695.g55e58542db'
>>> 
>>> s = pd.Series([0, 0])
>>> s
0    0
1    0
dtype: int64
>>> 
>>> s2 = pd.Series([42])
>>> s2
0    42
dtype: int64
>>> 
>>> s.loc[0] = s2
>>> s
0    42.0
1     0.0
dtype: float64
>>> 

Does not need a release note, this issue is only on master as on 1.2.4 this raises ValueError: No axis named 1 for object type Series which was fixed in #39358

draft, since if we merge and backport #40555 first, we can also remove the patch in this PR.

@simonjayhawkins simonjayhawkins added Indexing Related to indexing on series/frames, not to indexes themselves Dtype Conversions Unexpected or buggy dtype conversions Series Series data structure labels May 24, 2021
@@ -158,7 +158,7 @@ def test_setitem_series_object_dtype(self, indexer, ser_index):
expected = Series([Series([42], index=[ser_index]), 0], dtype="object")
tm.assert_series_equal(ser, expected)

@pytest.mark.parametrize("index, exp_value", [(0, 42.0), (1, np.nan)])
@pytest.mark.parametrize("index, exp_value", [(0, 42), (1, np.nan)])
def test_setitem_series(self, index, exp_value):
Copy link
Member

Choose a reason for hiding this comment

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

this seems weird. wouldnt we expect an object-dtype Series with ser.loc[0] itself being a Series?

Copy link
Member Author

Choose a reason for hiding this comment

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

that's unrelated to the changes here. so will not be changing the indexing code in this PR. This PR is a followon to #40555 to change can_hold_element, which I'm uncomfortable doing on 1.2.x since we may not have another release after the next one.

Copy link
Member

Choose a reason for hiding this comment

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

OK. cc @phofl thoughts on desired behavior?

Copy link
Member

Choose a reason for hiding this comment

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

I think the behavior after this pr is correct.

ser.loc[0] = Series([42], index=[0])

This assigns 42 to the first element in the Series, so would not expect a type cast here

Copy link
Member

Choose a reason for hiding this comment

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

so you expect to get the same result from ser.loc[0] = ser2 as you would from ser.loc[[0]] = ser2?

Copy link
Contributor

Choose a reason for hiding this comment

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

did this resolve? (is this a separate patch / issue s well)?

Copy link
Member Author

Choose a reason for hiding this comment

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

we need a separate issue/patch if any other changes. @jbrockmendel @phofl

if another patch is done, this PR is not urgent as it becomes just a refactor.

if another patch is not done, we should merge this before 1.3.

Copy link
Member Author

Choose a reason for hiding this comment

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

@jbrockmendel @phofl is there a plan to change the return type. otherwise we should probably merge this for 1.3

waiting and we would need a release note and decide on backport (which i'd be -1 on, for the same reason I didn't change can_hold_element in 1.2.5)

Copy link
Member

Choose a reason for hiding this comment

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

Lgtm too. Even if we agree that we should return something else, the int result is more consistent than the float result

Copy link
Member

Choose a reason for hiding this comment

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

The correct-behavior question may be related to #16864

@simonjayhawkins simonjayhawkins added this to the 1.3 milestone May 24, 2021
@simonjayhawkins
Copy link
Member Author

milestoned as 1.3, but if the indexing is to be changed in another PR this becomes less urgent.

@jreback jreback removed this from the 1.3 milestone May 31, 2021
@jreback
Copy link
Contributor

jreback commented May 31, 2021

let's move off the milestone

@simonjayhawkins simonjayhawkins marked this pull request as ready for review June 1, 2021 13:13
Copy link
Contributor

@jreback jreback left a comment

Choose a reason for hiding this comment

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

can you add whatsnew

@simonjayhawkins
Copy link
Member Author

simonjayhawkins commented Jun 4, 2021 via email

@jbrockmendel
Copy link
Member

LGTM

@simonjayhawkins simonjayhawkins added this to the 1.3 milestone Jun 8, 2021
@simonjayhawkins
Copy link
Member Author

@jreback OK to merge?

@jreback jreback merged commit b73c38e into pandas-dev:master Jun 8, 2021
@jreback
Copy link
Contributor

jreback commented Jun 8, 2021

yep

@simonjayhawkins simonjayhawkins deleted the can-hold-element branch June 8, 2021 14:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Dtype Conversions Unexpected or buggy dtype conversions Indexing Related to indexing on series/frames, not to indexes themselves Series Series data structure
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants