Description
Code Sample, a copy-pastable example if possible
import pandas as pd
import numpy as np
x = pd.MultiIndex.from_tuples([(1, 2), (3, 4)], names=['a', 'b'])
y = x[np.array([False, False])] # multiindex y is now empty
y.unique()
-->
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-1-290d71fd5bc3> in <module>()
3 x = pd.MultiIndex.from_tuples([(1, 2), (3, 4)]. names=['a', 'b'])
4 y = x[np.array([False, False])]
----> 5 y.unique()
C:\projects\pandas-dk\pandas\core\indexes\multi.py in unique(self, level)
1072
1073 if level is None:
-> 1074 return super(MultiIndex, self).unique()
1075 else:
1076 level = self._get_level_number(level)
C:\projects\pandas-dk\pandas\core\indexes\base.py in unique(self, level)
3971 self._validate_index_level(level)
3972 result = super(Index, self).unique()
-> 3973 return self._shallow_copy(result)
3974
3975 @Appender(base._shared_docs['drop_duplicates'] % _index_doc_kwargs)
C:\projects\pandas-dk\pandas\core\indexes\multi.py in _shallow_copy(self, values, **kwargs)
559 # discards freq
560 kwargs.pop('freq', None)
--> 561 return MultiIndex.from_tuples(values, **kwargs)
562 return self.view()
563
C:\projects\pandas-dk\pandas\core\indexes\multi.py in from_tuples(cls, tuples, sortorder, names)
1316 if names is None:
1317 msg = 'Cannot infer number of levels from empty list'
-> 1318 raise TypeError(msg)
1319 arrays = [[]] * len(names)
1320 elif isinstance(tuples, (np.ndarray, Index)):
TypeError: Cannot infer number of levels from empty list
Problem description
Looks similar to #16777. Calling unique
on an empty single-level index works fine, but doing so on an empty MultiIndex
fails. In versions prior to 0.19 MultiIndex.unique
on an empty MultiIndex
worked (returning an empty array), but now that the array is being wrapped in an index this is causing a failure.
Expected Output
MultiIndex(levels=[[1, 3], [2, 4]],
labels=[[], []],
names=['a', 'b'])
Output of pd.show_versions()
INSTALLED VERSIONS
commit: b669112
python: 3.6.4.final.0
python-bits: 64
OS: Windows
OS-release: 7
machine: AMD64
processor: Intel64 Family 6 Model 62 Stepping 4, GenuineIntel
byteorder: little
LC_ALL: None
LANG: None
LOCALE: None.None
pandas: 0.23.0.dev0+457.gb669112
pytest: 3.3.2
pip: 9.0.1
setuptools: 38.4.0
Cython: 0.27.3
numpy: 1.14.0
scipy: 1.0.0
pyarrow: 0.8.0
xarray: 0.10.0
IPython: 6.2.1
sphinx: 1.6.6
patsy: 0.5.0
dateutil: 2.6.1
pytz: 2017.3
blosc: None
bottleneck: 1.2.1
tables: 3.4.2
numexpr: 2.6.4
feather: 0.4.0
matplotlib: 2.1.2
openpyxl: 2.4.10
xlrd: 1.1.0
xlwt: 1.3.0
xlsxwriter: 1.0.2
lxml: 4.1.1
bs4: 4.6.0
html5lib: 1.0.1
sqlalchemy: 1.2.1
pymysql: 0.7.11.None
psycopg2: None
jinja2: 2.10
s3fs: 0.1.2
fastparquet: 0.1.4
pandas_gbq: None
pandas_datareader: None