From #15425
Code Sample, a copy-pastable example if possibleIn [3]: mi = pd.MultiIndex.from_product([[1, 2], ['a', 'b']]) In [4]: pd.Series(range(4)).loc[np.array([1, 2])] Out[4]: 1 1 2 2 dtype: int64 In [5]: pd.Series(range(4), index=mi).loc[np.array([1, 2])] --------------------------------------------------------------------------- TypeError Traceback (most recent call last) /home/pietro/nobackup/repo/pandas/pandas/core/indexing.py in _get_label(self, label, axis) 99 try: --> 100 return self.obj._xs(label, axis=axis) 101 except: /home/pietro/nobackup/repo/pandas/pandas/core/generic.py in xs(self, key, axis, level, drop_level) 1842 loc, new_index = self.index.get_loc_level(key, -> 1843 drop_level=drop_level) 1844 else: /home/pietro/nobackup/repo/pandas/pandas/indexes/multi.py in get_loc_level(self, key, level, drop_level) 1932 else: -> 1933 return partial_selection(key) 1934 else: /home/pietro/nobackup/repo/pandas/pandas/indexes/multi.py in partial_selection(key, indexer) 1897 if indexer is None: -> 1898 indexer = self.get_loc(key) 1899 ilevels = [i for i in range(len(key)) /home/pietro/nobackup/repo/pandas/pandas/indexes/multi.py in get_loc(self, key, method) 1807 start, stop = (self.slice_locs(lead_key, lead_key) -> 1808 if lead_key else (0, len(self))) 1809 /home/pietro/nobackup/repo/pandas/pandas/indexes/multi.py in slice_locs(self, start, end, step, kind) 1713 # happens in get_slice_bound method), but it adds meaningful doc. -> 1714 return super(MultiIndex, self).slice_locs(start, end, step, kind=kind) 1715 /home/pietro/nobackup/repo/pandas/pandas/indexes/base.py in slice_locs(self, start, end, step, kind) 3346 if start is not None: -> 3347 start_slice = self.get_slice_bound(start, 'left', kind) 3348 if start_slice is None: /home/pietro/nobackup/repo/pandas/pandas/indexes/multi.py in get_slice_bound(self, label, side, kind) 1684 label = label, -> 1685 return self._partial_tup_index(label, side=side) 1686 /home/pietro/nobackup/repo/pandas/pandas/indexes/multi.py in _partial_tup_index(self, tup, side) 1727 -> 1728 if lab not in lev: 1729 if not lev.is_type_compatible(lib.infer_dtype([lab])): /home/pietro/nobackup/repo/pandas/pandas/indexes/base.py in __contains__(self, key) 1495 def __contains__(self, key): -> 1496 hash(key) 1497 # work around some kind of odd cython bug TypeError: unhashable type: 'numpy.ndarray' During handling of the above exception, another exception occurred: TypeError Traceback (most recent call last) <ipython-input-5-bf8891f2016d> in <module>() ----> 1 pd.Series(range(4), index=mi).loc[np.array([1, 2])] /home/pietro/nobackup/repo/pandas/pandas/core/indexing.py in __getitem__(self, key) 1339 else: 1340 key = com._apply_if_callable(key, self.obj) -> 1341 return self._getitem_axis(key, axis=0) 1342 1343 def _is_scalar_access(self, key): /home/pietro/nobackup/repo/pandas/pandas/core/indexing.py in _getitem_axis(self, key, axis) 1550 # fall thru to straight lookup 1551 self._has_valid_type(key, axis) -> 1552 return self._get_label(key, axis=axis) 1553 1554 /home/pietro/nobackup/repo/pandas/pandas/core/indexing.py in _get_label(self, label, axis) 100 return self.obj._xs(label, axis=axis) 101 except: --> 102 return self.obj[label] 103 elif isinstance(label, tuple) and isinstance(label[axis], slice): 104 raise IndexingError('no slices here, handle elsewhere') /home/pietro/nobackup/repo/pandas/pandas/core/series.py in __getitem__(self, key) 645 key = check_bool_indexer(self.index, key) 646 --> 647 return self._get_with(key) 648 649 def _get_with(self, key): /home/pietro/nobackup/repo/pandas/pandas/core/series.py in _get_with(self, key) 658 if isinstance(key, tuple): 659 try: --> 660 return self._get_values_tuple(key) 661 except: 662 if len(key) == 1: /home/pietro/nobackup/repo/pandas/pandas/core/series.py in _get_values_tuple(self, key) 706 707 # If key is contained, would have returned by now --> 708 indexer, new_index = self.index.get_loc_level(key) 709 return self._constructor(self._values[indexer], 710 index=new_index).__finalize__(self) /home/pietro/nobackup/repo/pandas/pandas/indexes/multi.py in get_loc_level(self, key, level, drop_level) 1931 return partial_selection(key) 1932 else: -> 1933 return partial_selection(key) 1934 else: 1935 indexer = None /home/pietro/nobackup/repo/pandas/pandas/indexes/multi.py in partial_selection(key, indexer) 1896 def partial_selection(key, indexer=None): 1897 if indexer is None: -> 1898 indexer = self.get_loc(key) 1899 ilevels = [i for i in range(len(key)) 1900 if key[i] != slice(None, None)] /home/pietro/nobackup/repo/pandas/pandas/indexes/multi.py in get_loc(self, key, method) 1806 lead_key, follow_key = key[:i], key[i:] 1807 start, stop = (self.slice_locs(lead_key, lead_key) -> 1808 if lead_key else (0, len(self))) 1809 1810 if start == stop: /home/pietro/nobackup/repo/pandas/pandas/indexes/multi.py in slice_locs(self, start, end, step, kind) 1712 # This function adds nothing to its parent implementation (the magic 1713 # happens in get_slice_bound method), but it adds meaningful doc. -> 1714 return super(MultiIndex, self).slice_locs(start, end, step, kind=kind) 1715 1716 def _partial_tup_index(self, tup, side='left'): /home/pietro/nobackup/repo/pandas/pandas/indexes/base.py in slice_locs(self, start, end, step, kind) 3345 start_slice = None 3346 if start is not None: -> 3347 start_slice = self.get_slice_bound(start, 'left', kind) 3348 if start_slice is None: 3349 start_slice = 0 /home/pietro/nobackup/repo/pandas/pandas/indexes/multi.py in get_slice_bound(self, label, side, kind) 1683 if not isinstance(label, tuple): 1684 label = label, -> 1685 return self._partial_tup_index(label, side=side) 1686 1687 def slice_locs(self, start=None, end=None, step=None, kind=None): /home/pietro/nobackup/repo/pandas/pandas/indexes/multi.py in _partial_tup_index(self, tup, side) 1726 section = labs[start:end] 1727 -> 1728 if lab not in lev: 1729 if not lev.is_type_compatible(lib.infer_dtype([lab])): 1730 raise TypeError('Level type mismatch: %s' % lab) /home/pietro/nobackup/repo/pandas/pandas/indexes/base.py in __contains__(self, key) 1494 1495 def __contains__(self, key): -> 1496 hash(key) 1497 # work around some kind of odd cython bug 1498 try: TypeError: unhashable type: 'numpy.ndarray'Problem description
The array
should be accepted as it is accepted for the (non-Multi
)Index
In [6]: pd.Series(range(4), index=mi).loc[np.array([1, 2])] Out[6]: 1 a 0 b 1 2 a 2 b 3 dtype: int64Output of
pd.show_versions()
INSTALLED VERSIONS ------------------ commit: None python: 3.5.2.final.0 python-bits: 64 OS: Linux OS-release: 4.7.0-1-amd64 machine: x86_64 processor: byteorder: little LC_ALL: None LANG: it_IT.utf8 LOCALE: it_IT.UTF-8
pandas: 0.19.0+466.g5a8883b
pytest: 3.0.6
pip: 8.1.2
setuptools: 28.0.0
Cython: 0.23.4
numpy: 1.12.0
scipy: 0.18.1
xarray: None
IPython: 5.1.0.dev
sphinx: 1.4.8
patsy: 0.3.0-dev
dateutil: 2.5.3
pytz: 2015.7
blosc: None
bottleneck: 1.2.0
tables: 3.2.2
numexpr: 2.6.0
feather: None
matplotlib: 2.0.0rc2
openpyxl: 2.3.0
xlrd: 1.0.0
xlwt: 1.1.2
xlsxwriter: 0.9.3
lxml: 3.6.4
bs4: 4.5.1
html5lib: 0.999
httplib2: 0.9.1
apiclient: 1.5.2
sqlalchemy: 1.0.15
pymysql: None
psycopg2: None
jinja2: 2.8
s3fs: None
pandas_datareader: 0.2.1
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4