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()

INSTALLED VERSIONS ------------------ commit: None python: 3.6.3.final.0 python-bits: 64 OS: Windows OS-release: 10 machine: AMD64 processor: Intel64 Family 6 Model 94 Stepping 3, GenuineIntel byteorder: little LC_ALL: None LANG: None LOCALE: None.None pandas: 0.22.0 pytest: 3.3.1 pip: 9.0.1 setuptools: 36.5.0.post20170921 Cython: 0.26.1 numpy: 1.13.3 scipy: 0.19.1 pyarrow: 0.7.1 xarray: None IPython: 6.1.0 sphinx: 1.6.3 patsy: 0.4.1 dateutil: 2.6.1 pytz: 2017.2 blosc: None bottleneck: 1.2.1 tables: 3.4.2 numexpr: 2.6.2 feather: 0.4.0 matplotlib: 2.1.0 openpyxl: 2.4.8 xlrd: 1.1.0 xlwt: 1.3.0 xlsxwriter: 1.0.2 lxml: 4.1.0 bs4: 4.6.0 html5lib: 0.999999999 sqlalchemy: 1.1.13 pymysql: None psycopg2: None jinja2: 2.9.6 s3fs: None fastparquet: 0.1.3 pandas_gbq: 0.2.1 pandas_datareader: 0.5.0

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? 😊