Skip to content

Commit 64e8878

Browse files
committed
BUG: repr fix for all-NA index level. close #1971
1 parent 4543656 commit 64e8878

File tree

3 files changed

+25
-3
lines changed

3 files changed

+25
-3
lines changed

RELEASE.rst

+1
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,7 @@ pandas 0.9.0
234234
- Fix bug in DataFrame.duplicated to enable iterables other than list-types
235235
as input argument (#1773)
236236
- Fix resample bug when passed list of lambdas as `how` argument (#1808)
237+
- Repr fix for MultiIndex level with all NAs (#1971)
237238

238239

239240
pandas 0.8.1

pandas/core/index.py

+11-3
Original file line numberDiff line numberDiff line change
@@ -1471,7 +1471,8 @@ def get_level_values(self, level):
14711471
labels = self.labels[num]
14721472
return unique_vals.take(labels)
14731473

1474-
def format(self, space=2, sparsify=None, adjoin=True, names=False):
1474+
def format(self, space=2, sparsify=None, adjoin=True, names=False,
1475+
na_rep='NaN'):
14751476
from pandas.core.common import _stringify
14761477
from pandas.core.format import print_config
14771478
def _strify(x):
@@ -1480,8 +1481,15 @@ def _strify(x):
14801481
if len(self) == 0:
14811482
return []
14821483

1483-
stringified_levels = [lev.take(lab).format() for lev, lab in
1484-
zip(self.levels, self.labels)]
1484+
1485+
stringified_levels = []
1486+
for lev, lab in zip(self.levels, self.labels):
1487+
if len(lev) > 0:
1488+
formatted = lev.take(lab).format()
1489+
else:
1490+
# weird all NA case
1491+
formatted = [str(x) for x in com.take_1d(lev.values, lab)]
1492+
stringified_levels.append(formatted)
14851493

14861494
result_levels = []
14871495
for lev, name in zip(stringified_levels, self.names):

pandas/tests/test_frame.py

+13
Original file line numberDiff line numberDiff line change
@@ -1591,6 +1591,19 @@ def test_set_index_multiindexcolumns(self):
15911591
xp.index.names = [df.columns[0]]
15921592
assert_frame_equal(rs, xp)
15931593

1594+
def test_set_index_empty_column(self):
1595+
# #1971
1596+
df = DataFrame([
1597+
dict(a=1, p=0),
1598+
dict(a=2, m=10),
1599+
dict(a=3, m=11, p=20),
1600+
dict(a=4, m=12, p=21)
1601+
], columns=('a', 'm', 'p', 'x'))
1602+
1603+
# it works!
1604+
result = df.set_index(['a', 'x'])
1605+
repr(result)
1606+
15941607
def test_set_columns(self):
15951608
cols = Index(np.arange(len(self.mixed_frame.columns)))
15961609
self.mixed_frame.columns = cols

0 commit comments

Comments
 (0)