Skip to content

MultiIndex.get_leves_values() returns inconsistent Index if there are NaNs #17924

Closed
@toobaz

Description

@toobaz

Code Sample, a copy-pastable example if possible

In [3]: pd.MultiIndex.from_arrays([['a', 'b', 'b'], [2, np.nan, 2]]).get_level_values(1)
Out[3]: Int64Index([2.0, nan, 2.0], dtype='float64')

Problem description

An Int64Index should never have dtype='float64'.

Ironically, this is tested extensively in test_get_level_values_na inside pandas/tests/indexes/test_multi.py, except that then the result is explicitly casted (this came out from this comment by Joris).

I'm pretty sure the bug comes from this line, but at the moment I'm not sure what should replace it.

Expected Output

Float64Index([2.0, nan, 2.0], dtype='float64')

Output of pd.show_versions()

INSTALLED VERSIONS

commit: 51c5f4d
python: 3.5.3.final.0
python-bits: 64
OS: Linux
OS-release: 4.9.0-3-amd64
machine: x86_64
processor:
byteorder: little
LC_ALL: None
LANG: it_IT.UTF-8
LOCALE: it_IT.UTF-8

pandas: 0.21.0rc1+26.g51c5f4d2a
pytest: 3.0.6
pip: 9.0.1
setuptools: None
Cython: 0.25.2
numpy: 1.12.1
scipy: 0.19.0
pyarrow: None
xarray: None
IPython: 5.1.0.dev
sphinx: 1.5.6
patsy: 0.4.1
dateutil: 2.6.0
pytz: 2017.2
blosc: None
bottleneck: 1.2.1
tables: 3.3.0
numexpr: 2.6.1
feather: 0.3.1
matplotlib: 2.0.0
openpyxl: None
xlrd: 1.0.0
xlwt: 1.1.2
xlsxwriter: 0.9.6
lxml: None
bs4: 4.5.3
html5lib: 0.999999999
sqlalchemy: 1.0.15
pymysql: None
psycopg2: None
jinja2: 2.9.6
s3fs: None
fastparquet: None
pandas_gbq: None
pandas_datareader: 0.2.1

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions