-
- Notifications
You must be signed in to change notification settings - Fork 19.4k
Closed
Labels
BugMultiIndexOutput-Formatting__repr__ of pandas objects, to_string__repr__ of pandas objects, to_string
Description
Using 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) dfProblem 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)
Metadata
Metadata
Assignees
Labels
BugMultiIndexOutput-Formatting__repr__ of pandas objects, to_string__repr__ of pandas objects, to_string