From 908d0f0dc3adf83b19de5d0a15267e02dfca36aa Mon Sep 17 00:00:00 2001 From: Jeff Reback Date: Fri, 21 Apr 2017 21:51:15 -0400 Subject: [PATCH] API: raise notImplementedError on to_json(orient='table') for a DataFrame with a column MultiIndex closes #15996 --- pandas/io/json/json.py | 7 ++++++- pandas/tests/io/formats/test_printing.py | 17 ++++++++++++++++- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/pandas/io/json/json.py b/pandas/io/json/json.py index 7149ab497a00d..28ea8298cee9e 100644 --- a/pandas/io/json/json.py +++ b/pandas/io/json/json.py @@ -6,7 +6,7 @@ from pandas._libs.tslib import iNaT from pandas.compat import StringIO, long, u from pandas import compat, isnull -from pandas import Series, DataFrame, to_datetime +from pandas import Series, DataFrame, to_datetime, MultiIndex from pandas.io.common import get_filepath_or_buffer, _get_handle from pandas.core.common import AbstractMethodError from pandas.io.formats.printing import pprint_thing @@ -138,6 +138,11 @@ def __init__(self, obj, orient, date_format, double_precision, self.schema = build_table_schema(obj) + # NotImplementd on a column MultiIndex + if obj.ndim == 2 and isinstance(obj.columns, MultiIndex): + raise NotImplementedError( + "orient='table' is not supported for MultiIndex") + # TODO: Do this timedelta properly in objToJSON.c See GH #15137 if ((obj.ndim == 1) and (obj.name in set(obj.index.names)) or len(obj.columns & obj.index.names)): diff --git a/pandas/tests/io/formats/test_printing.py b/pandas/tests/io/formats/test_printing.py index d2c3b47aba042..882c9b9bd42f6 100644 --- a/pandas/tests/io/formats/test_printing.py +++ b/pandas/tests/io/formats/test_printing.py @@ -1,7 +1,10 @@ # -*- coding: utf-8 -*- import pytest -from pandas import compat + +import numpy as np import pandas as pd + +from pandas import compat import pandas.io.formats.printing as printing import pandas.io.formats.format as fmt import pandas.util.testing as tm @@ -166,6 +169,18 @@ def test_publishes(self): 'application/vnd.dataresource+json'} self.assertEqual(set(arg.keys()), expected) + def test_publishes_not_implemented(self): + # column MultiIndex + # GH 15996 + midx = pd.MultiIndex.from_product([['A', 'B'], ['a', 'b', 'c']]) + df = pd.DataFrame(np.random.randn(5, len(midx)), columns=midx) + + make_patch = self.mock.patch('IPython.display.display') + opt = pd.option_context('display.html.table_schema', True) + with opt, make_patch as mock_display: # noqa + with pytest.raises(NotImplementedError): + df._ipython_display_() + def test_config_on(self): df = pd.DataFrame({"A": [1, 2]}) with pd.option_context("display.html.table_schema", True):