Description
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()
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 commentedon Jan 5, 2018
I think this is accommodate the fact that
Index(...)
may return aMultiIndex
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.
spacesphere commentedon Jan 8, 2018
As I can see,
names
is used only when trying to createMultiIndex
, otherwise it's just ignored.There's the
set_names
method that can be used instead of plain assignment to thename
attribute when creating newIndex
object to avoid described behaviour. It doesn't seem to break other things.TomAugspurger commentedon Jan 8, 2018
@PoppyBagel, thanks. Interested in making a PR adding and documenting
names
?spacesphere commentedon Jan 8, 2018
@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 theIndex
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 commentedon Jan 8, 2018
names
argument #19168ajamous1 commentedon Mar 22, 2025
I tried fixing this right now, based on what Tom suggested earlier
riteshpen commentedon Apr 24, 2025
Has this issue been resolved? I am looking for a first time open source contribution.
microslaw commentedon May 31, 2025
Isn't this issue outdated?
Index.__new__()
doesn't support the argumentnames
anymore. Additionally, as far as I was able to checkIndex.__new__(name=name)
will accept anyname
without modifying it, as long as it isHashable