Skip to content

Commit 5b07d02

Browse files
authored
API: raise notImplementedError on to_json(orient='table') for a DataFrame with a column MultiIndex (#16095)
closes #15996
1 parent c728a22 commit 5b07d02

File tree

2 files changed

+22
-2
lines changed

2 files changed

+22
-2
lines changed

pandas/io/json/json.py

+6-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from pandas._libs.tslib import iNaT
77
from pandas.compat import StringIO, long, u
88
from pandas import compat, isnull
9-
from pandas import Series, DataFrame, to_datetime
9+
from pandas import Series, DataFrame, to_datetime, MultiIndex
1010
from pandas.io.common import get_filepath_or_buffer, _get_handle
1111
from pandas.core.common import AbstractMethodError
1212
from pandas.io.formats.printing import pprint_thing
@@ -138,6 +138,11 @@ def __init__(self, obj, orient, date_format, double_precision,
138138

139139
self.schema = build_table_schema(obj)
140140

141+
# NotImplementd on a column MultiIndex
142+
if obj.ndim == 2 and isinstance(obj.columns, MultiIndex):
143+
raise NotImplementedError(
144+
"orient='table' is not supported for MultiIndex")
145+
141146
# TODO: Do this timedelta properly in objToJSON.c See GH #15137
142147
if ((obj.ndim == 1) and (obj.name in set(obj.index.names)) or
143148
len(obj.columns & obj.index.names)):

pandas/tests/io/formats/test_printing.py

+16-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
# -*- coding: utf-8 -*-
22
import pytest
3-
from pandas import compat
3+
4+
import numpy as np
45
import pandas as pd
6+
7+
from pandas import compat
58
import pandas.io.formats.printing as printing
69
import pandas.io.formats.format as fmt
710
import pandas.util.testing as tm
@@ -166,6 +169,18 @@ def test_publishes(self):
166169
'application/vnd.dataresource+json'}
167170
self.assertEqual(set(arg.keys()), expected)
168171

172+
def test_publishes_not_implemented(self):
173+
# column MultiIndex
174+
# GH 15996
175+
midx = pd.MultiIndex.from_product([['A', 'B'], ['a', 'b', 'c']])
176+
df = pd.DataFrame(np.random.randn(5, len(midx)), columns=midx)
177+
178+
make_patch = self.mock.patch('IPython.display.display')
179+
opt = pd.option_context('display.html.table_schema', True)
180+
with opt, make_patch as mock_display: # noqa
181+
with pytest.raises(NotImplementedError):
182+
df._ipython_display_()
183+
169184
def test_config_on(self):
170185
df = pd.DataFrame({"A": [1, 2]})
171186
with pd.option_context("display.html.table_schema", True):

0 commit comments

Comments
 (0)