Table Schema bombs with MultiIndex
See original GitHub issueUsing the new (ok, yet to be released) table schemaized with the generated MultiIndex as mentioned in #15379, I noticed that it creates a traceback (and falls back on HTML)
Code Sample
import pandas as pd
import numpy as np
pd.options.display.html.table_schema = True
midx = pd.MultiIndex.from_product([['A', 'B'], ['a', 'b', 'c']])
df = pd.DataFrame(np.random.randn(5, len(midx)), columns=midx)
df
Problem description
Full Traceback
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
/Users/kylek/code/src/github.com/pandas-dev/pandas/pandas/indexes/multi.py in _convert_can_do_setop(self, other)
2513 try:
-> 2514 other = MultiIndex.from_tuples(other)
2515 except:
/Users/kylek/code/src/github.com/pandas-dev/pandas/pandas/indexes/multi.py in from_tuples(cls, tuples, sortorder, names)
1128 elif isinstance(tuples, list):
-> 1129 arrays = list(lib.to_object_array_tuples(tuples).T)
1130 else:
TypeError: Argument 'rows' has incorrect type (expected list, got FrozenList)
During handling of the above exception, another exception occurred:
TypeError Traceback (most recent call last)
/usr/local/lib/python3.6/site-packages/IPython/core/formatters.py in __call__(self, obj)
880 method = get_real_method(obj, self.print_method)
881 if method is not None:
--> 882 method()
883 return True
884
/Users/kylek/code/src/github.com/pandas-dev/pandas/pandas/core/generic.py in _ipython_display_(self)
138 latex = self._repr_latex_() if hasattr(self, '_repr_latex_') else None
139 html = self._repr_html_() if hasattr(self, '_repr_html_') else None
--> 140 table_schema = self._repr_table_schema_()
141 # We need the inital newline since we aren't going through the
142 # usual __repr__. See
/Users/kylek/code/src/github.com/pandas-dev/pandas/pandas/core/generic.py in _repr_table_schema_(self)
156 if config.get_option("display.html.table_schema"):
157 data = self.head(config.get_option('display.max_rows'))
--> 158 payload = json.loads(data.to_json(orient='table'),
159 object_pairs_hook=collections.OrderedDict)
160 return payload
/Users/kylek/code/src/github.com/pandas-dev/pandas/pandas/core/generic.py in to_json(self, path_or_buf, orient, date_format, double_precision, force_ascii, date_unit, default_handler, lines)
1232 force_ascii=force_ascii, date_unit=date_unit,
1233 default_handler=default_handler,
-> 1234 lines=lines)
1235
1236 def to_hdf(self, path_or_buf, key, **kwargs):
/Users/kylek/code/src/github.com/pandas-dev/pandas/pandas/io/json/json.py in to_json(path_or_buf, obj, orient, date_format, double_precision, force_ascii, date_unit, default_handler, lines)
44 obj, orient=orient, date_format=date_format,
45 double_precision=double_precision, ensure_ascii=force_ascii,
---> 46 date_unit=date_unit, default_handler=default_handler).write()
47
48 if lines:
/Users/kylek/code/src/github.com/pandas-dev/pandas/pandas/io/json/json.py in __init__(self, obj, orient, date_format, double_precision, ensure_ascii, date_unit, default_handler)
141 # TODO: Do this timedelta properly in objToJSON.c See GH #15137
142 if ((obj.ndim == 1) and (obj.name in set(obj.index.names)) or
--> 143 len(obj.columns & obj.index.names)):
144 msg = "Overlapping names between the index and columns"
145 raise ValueError(msg)
/Users/kylek/code/src/github.com/pandas-dev/pandas/pandas/indexes/base.py in __and__(self, other)
2046
2047 def __and__(self, other):
-> 2048 return self.intersection(other)
2049
2050 def __or__(self, other):
/Users/kylek/code/src/github.com/pandas-dev/pandas/pandas/indexes/multi.py in intersection(self, other)
2447 """
2448 self._assert_can_do_setop(other)
-> 2449 other, result_names = self._convert_can_do_setop(other)
2450
2451 if self.equals(other):
/Users/kylek/code/src/github.com/pandas-dev/pandas/pandas/indexes/multi.py in _convert_can_do_setop(self, other)
2514 other = MultiIndex.from_tuples(other)
2515 except:
-> 2516 raise TypeError(msg)
2517 else:
2518 result_names = self.names if self.names == other.names else None
TypeError: other must be a MultiIndex or a list of tuples
The key line in there is expected list, got FrozenList
from arrays = list(lib.to_object_array_tuples(tuples).T)
Issue Analytics
- State:
- Created 6 years ago
- Comments:13 (13 by maintainers)
Top Results From Across the Web
boot::multi_index get random access on unique indexe
Is it possible to tell the container to have an array structure with a random access on an unique index (something like boost::flat_set...
Read more >| notebook.community
Switching rows and columns. Transpose. Referring to variables with multi-indexes. Stack and unstack. Managing column structure and labels. Pivot. Unstack ...
Read more >Visualizing Data with Bokeh and Pandas
In this tutorial, you will learn how to do this in Python by using the Bokeh and Pandas libraries. Specifically, we will work...
Read more >A pandas pivot_table primer - /var/
Notice that for the columns we havea MultiIndex of both value_type (author, name etc) and genre (Crime, Fantasy etc) while for the index...
Read more >Entropy analysis and grey cluster analysis of multiple indexes ...
results of multi-index analysis constructed by gray correlation degree, gray correlation ... The combustion heat12–17 was measured by oxygen bomb.
Read more >Top Related Medium Post
No results found
Top Related StackOverflow Question
No results found
Troubleshoot Live Code
Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start FreeTop Related Reddit Thread
No results found
Top Related Hackernoon Post
No results found
Top Related Tweet
No results found
Top Related Dev.to Post
No results found
Top Related Hashnode Post
No results found
Top GitHub Comments
I think so, thanks. I’ll emit a warning when we fail to serialize the object, and publish just the text and html reprs.
Warning on stderr will be printed in red in classic notebook. (I believe it should be yellow because red is scary). An error will stop the execution while just printing on stderr is considered as just “text” and the notebook should keep on processing as planned. Does that answer your question ?