Skip to content

BUG: Creating Index name using names names argument, doesn't set index name #19082

Open
@jsnowacki

Description

@jsnowacki
Contributor

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

Activity

TomAugspurger

TomAugspurger commented on Jan 5, 2018

@TomAugspurger
Contributor

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.

added this to the Next Major Release milestone on Jan 5, 2018
spacesphere

spacesphere commented on Jan 8, 2018

@spacesphere
Contributor

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.

TomAugspurger

TomAugspurger commented on Jan 8, 2018

@TomAugspurger
Contributor

@PoppyBagel, thanks. Interested in making a PR adding and documenting names?

spacesphere

spacesphere commented on Jan 8, 2018

@spacesphere
Contributor

@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).

TomAugspurger

TomAugspurger commented on Jan 8, 2018

@TomAugspurger
Contributor
removed
IndexingRelated to indexing on series/frames, not to indexes themselves
on Feb 18, 2020
removed this from the Contributions Welcome milestone on Oct 13, 2022
ajamous1

ajamous1 commented on Mar 22, 2025

@ajamous1

I tried fixing this right now, based on what Tom suggested earlier

riteshpen

riteshpen commented on Apr 24, 2025

@riteshpen

Has this issue been resolved? I am looking for a first time open source contribution.

microslaw

microslaw commented on May 31, 2025

@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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Participants

      @jsnowacki@TomAugspurger@jbrockmendel@mroeschke@spacesphere

      Issue actions

        BUG: Creating Index name using `names` names argument, doesn't set index name · Issue #19082 · pandas-dev/pandas