You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
In [2]: df=pd.DataFrame(-1, index=pd.MultiIndex.from_product([[1,2], ['a', 'b'], ['i', 'ii']]), columns=['A', 'B'])
In [3]: df.loc[[1]] # worksOut[3]:
AB1ai-1-1ii-1-1bi-1-1ii-1-1In [4]: df.loc[[(1, 'a')]] # misbehaves (acts as if labels were missing)Out[4]:
AB1aNaNNaNIn [5]: df.loc[[(1,)]] # raises---------------------------------------------------------------------------AttributeErrorTraceback (mostrecentcalllast)
/home/pietro/nobackup/repo/pandas/pandas/core/indexing.pyin_getitem_iterable(self, key, axis)
1100try:
->1101returnself.obj.reindex_axis(keyarr, axis=axis)
1102exceptAttributeError:
/home/pietro/nobackup/repo/pandas/pandas/core/frame.pyinreindex_axis(self, labels, axis, method, level, copy, limit, fill_value)
2836method=method, level=level, copy=copy,
->2837limit=limit, fill_value=fill_value)
2838/home/pietro/nobackup/repo/pandas/pandas/core/generic.pyinreindex_axis(self, labels, axis, method, level, copy, limit, fill_value)
2509new_index, indexer=axis_values.reindex(labels, method, level,
->2510limit=limit)
2511returnself._reindex_with_indexers({axis: [new_index, indexer]},
/home/pietro/nobackup/repo/pandas/pandas/core/indexes/multi.pyinreindex(self, target, method, level, limit, tolerance)
1845limit=limit,
->1846tolerance=tolerance)
1847else:
/home/pietro/nobackup/repo/pandas/pandas/core/indexes/multi.pyinget_indexer(self, target, method, limit, tolerance)
1791# don't have the same dtypes->1792ifself._inferred_type_levels!=target._inferred_type_levels:
1793returnIndex(self.values).get_indexer(target.values)
AttributeError: 'Int64Index'objecthasnoattribute'_inferred_type_levels'Duringhandlingoftheaboveexception, anotherexceptionoccurred:
AttributeErrorTraceback (mostrecentcalllast)
<ipython-input-5-e5c902934a28>in<module>()
---->1df.loc[[(1,)]]
/home/pietro/nobackup/repo/pandas/pandas/core/indexing.pyin__getitem__(self, key)
1326else:
1327key=com._apply_if_callable(key, self.obj)
->1328returnself._getitem_axis(key, axis=0)
13291330def_is_scalar_access(self, key):
/home/pietro/nobackup/repo/pandas/pandas/core/indexing.pyin_getitem_axis(self, key, axis)
1539raiseValueError('Cannot index with multidimensional key')
1540->1541returnself._getitem_iterable(key, axis=axis)
15421543# nested tuple slicing/home/pietro/nobackup/repo/pandas/pandas/core/indexing.pyin_getitem_iterable(self, key, axis)
1105ifaxis!=0:
1106raiseAssertionError('axis must be 0')
->1107returnself.obj.reindex(keyarr)
11081109# existing labels are non-unique/home/pietro/nobackup/repo/pandas/pandas/core/frame.pyinreindex(self, index, columns, **kwargs)
2827defreindex(self, index=None, columns=None, **kwargs):
2828returnsuper(DataFrame, self).reindex(index=index, columns=columns,
->2829**kwargs)
28302831 @Appender(_shared_docs['reindex_axis'] %_shared_doc_kwargs)
/home/pietro/nobackup/repo/pandas/pandas/core/generic.pyinreindex(self, *args, **kwargs)
2421# perform the reindex on the axes2422returnself._reindex_axes(axes, level, limit, tolerance, method,
->2423fill_value, copy).__finalize__(self)
24242425def_reindex_axes(self, axes, level, limit, tolerance, method, fill_value,
/home/pietro/nobackup/repo/pandas/pandas/core/frame.pyin_reindex_axes(self, axes, level, limit, tolerance, method, fill_value, copy)
2773ifindexisnotNone:
2774frame=frame._reindex_index(index, method, copy, level,
->2775fill_value, limit, tolerance)
27762777returnframe/home/pietro/nobackup/repo/pandas/pandas/core/frame.pyin_reindex_index(self, new_index, method, copy, level, fill_value, limit, tolerance)
2781new_index, indexer=self.index.reindex(new_index, method=method,
2782level=level, limit=limit,
->2783tolerance=tolerance)
2784returnself._reindex_with_indexers({0: [new_index, indexer]},
2785copy=copy, fill_value=fill_value,
/home/pietro/nobackup/repo/pandas/pandas/core/indexes/multi.pyinreindex(self, target, method, level, limit, tolerance)
1844indexer=self.get_indexer(target, method=method,
1845limit=limit,
->1846tolerance=tolerance)
1847else:
1848raiseException("cannot handle a non-unique multi-index!")
/home/pietro/nobackup/repo/pandas/pandas/core/indexes/multi.pyinget_indexer(self, target, method, limit, tolerance)
1790# we may not compare equally because of hashing if we1791# don't have the same dtypes->1792ifself._inferred_type_levels!=target._inferred_type_levels:
1793returnIndex(self.values).get_indexer(target.values)
1794AttributeError: 'Int64Index'objecthasnoattribute'_inferred_type_levels'
Problem description
This was already discussed here and here, opening a separate issue for clarity.
Expected Output
df.loc[[(1, 'a',)]] should return the same as df.loc[1, 'a', :] (or more explicitly, df.loc[(1, 'a', slice(None)), :]), while df.loc[[(1,)]] should return the same as df.loc[[1]].
By the way: I tend to think it is valid syntax, since the index has three levels - as valid as df.loc[1, 'a', 'i']', which is (officially, I guess) supported as a shortcut for df.loc[(1, 'a', 'i'), :]'.
Indeed, I would expect df.loc[1, 'a', 'i', :] to raise (and it does, but with a different error from what it should because of #14885).
Code Sample, a copy-pastable example if possible
Problem description
This was already discussed here and here, opening a separate issue for clarity.
Expected Output
df.loc[[(1, 'a',)]]
should return the same asdf.loc[1, 'a', :]
(or more explicitly,df.loc[(1, 'a', slice(None)), :]
), whiledf.loc[[(1,)]]
should return the same asdf.loc[[1]]
.Output of
pd.show_versions()
INSTALLED VERSIONS
commit: None
python: 3.5.3.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+834.g8c7b9731f
pytest: 3.0.6
pip: 9.0.1
setuptools: 33.1.1
Cython: 0.25.2
numpy: 1.12.0
scipy: 0.18.1
xarray: 0.9.1
IPython: 5.1.0.dev
sphinx: 1.4.9
patsy: 0.3.0-dev
dateutil: 2.5.3
pytz: 2016.7
blosc: None
bottleneck: 1.2.0
tables: 3.3.0
numexpr: 2.6.1
feather: 0.3.1
matplotlib: 2.0.0
openpyxl: 2.3.0
xlrd: 1.0.0
xlwt: 1.1.2
xlsxwriter: 0.9.6
lxml: 3.7.1
bs4: 4.5.3
html5lib: 0.999999999
sqlalchemy: 1.0.15
pymysql: None
psycopg2: None
jinja2: 2.8
s3fs: None
pandas_gbq: None
pandas_datareader: 0.2.1
The text was updated successfully, but these errors were encountered: