Code Sample, a copy-pastable example if possible
# This is true
i = pd.Index([], name='a')
assert i.name == 'a'
assert i.names == ('a',)
# This is false (fails assertion)
i = pd.Index([], names=('a',))
assert i.name == 'a'
assert i.names == ('a',)
Problem description
Setting Index name using name
parameter works correctly, but using names
parameter doesn;t do anything, i.e. i.name is None
. While the documentation doesn't list names
as a parameter, since it is an attribute, it gets listed as a parameter, e.g. in IDE.
Expected Output
# This is true
i = pd.Index([], name='a')
assert i.name == 'a'
assert i.names == ('a',)
# This is also true
i = pd.Index([], names=('a',))
assert i.name == 'a'
assert i.names == ('a',)
Output of pd.show_versions()
Comment From: TomAugspurger
I think this is accommodate the fact that Index(...)
may return a MultiIndex
In [9]: pd.Index([('a', 'b')], names=['a', 'b'])
Out[9]:
MultiIndex(levels=[['a'], ['b']],
labels=[[0], [0]],
names=['a', 'b'])
It'd be good to document that, and perhaps add it to the signature? That may be more trouble than it's worth if it breaks other things.
Comment From: spacesphere
As I can see, names
is used only when trying to create MultiIndex
, otherwise it's just ignored.
There's the set_names
method that can be used instead of plain assignment to the name
attribute when creating new Index
object to avoid described behaviour. It doesn't seem to break other things.
Comment From: TomAugspurger
@PoppyBagel, thanks. Interested in making a PR adding and documenting names
?
Comment From: spacesphere
@TomAugspurger, if you don't mind I could work on this issue.
But there's still a question: should names
be added as an explicit parameter to the Index
constructor or it may be left in optional kwargs? I think it's too specific case to change the signature (if I got your previous comment right).
Comment From: TomAugspurger
If possible, it'd be nice to have it be a regular keyword just like name
.
It will just go at the end of the current arguments, and we'll document
that it's only relevant for data
that result in a MultiIndex.
On Mon, Jan 8, 2018 at 12:38 PM, Kate notifications@github.com wrote:
@TomAugspurger https://github.com/tomaugspurger, if you don't mind I could work on this issue. But there's still a question: should names be added as an explicit parameter to the Index constructor or it may be left in optional kwargs? I think it's too specific case to change the signature (if I got your previous comment right).
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/pandas-dev/pandas/issues/19082#issuecomment-356054745, or mute the thread https://github.com/notifications/unsubscribe-auth/ABQHIjcoZnodlmFAUm6U7hjeQLB_ohoQks5tImClgaJpZM4RTgJg .
Comment From: ajamous1
I tried fixing this right now, based on what Tom suggested earlier
Comment From: riteshpen
Has this issue been resolved? I am looking for a first time open source contribution.
Comment From: microslaw
Isn't this issue outdated? Index.__new__()
doesn't support the argument names
anymore. Additionally, as far as I was able to check Index.__new__(name=name)
will accept any name
without modifying it, as long as it is Hashable
Comment From: bclaire92
Hi! I'm a new contributor and would love to work on this issue. Could you please assign it to me? 😊