Skip to content

Commit 7f85480

Browse files
committed
BUG/TST: format multi-index nan correctly
1 parent a80fe98 commit 7f85480

File tree

2 files changed

+19
-2
lines changed

2 files changed

+19
-2
lines changed

pandas/core/index.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -1654,13 +1654,13 @@ def format(self, space=2, sparsify=None, adjoin=True, names=False,
16541654
# we have some NA
16551655
mask = lab==-1
16561656
if mask.any():
1657-
formatted = np.array(formatted)
1657+
formatted = np.array(formatted,dtype=object)
16581658
formatted[mask] = na_rep
16591659
formatted = formatted.tolist()
16601660

16611661
else:
16621662
# weird all NA case
1663-
formatted = [com.pprint_thing(x, escape_chars=('\t', '\r', '\n'))
1663+
formatted = [com.pprint_thing(na_rep if isnull(x) else x, escape_chars=('\t', '\r', '\n'))
16641664
for x in com.take_1d(lev.values, lab)]
16651665
stringified_levels.append(formatted)
16661666

@@ -1672,6 +1672,7 @@ def format(self, space=2, sparsify=None, adjoin=True, names=False,
16721672
level.append(com.pprint_thing(name, escape_chars=('\t', '\r', '\n'))
16731673
if name is not None else '')
16741674

1675+
16751676
level.extend(np.array(lev, dtype=object))
16761677
result_levels.append(level)
16771678

pandas/tests/test_format.py

+16
Original file line numberDiff line numberDiff line change
@@ -666,6 +666,22 @@ def test_index_with_nan(self):
666666
expected = u' id1 id3 value\nid2 \nNaN 1a3 78d 123\nNaN 9h4 79d 64'
667667
self.assert_(result == expected)
668668

669+
# partial nan in mi
670+
df2 = df.copy()
671+
df2.ix[:,'id2'] = np.nan
672+
y = df2.set_index(['id2','id3'])
673+
result = y.to_string()
674+
expected = u' id1 value\nid2 id3 \nNaN 78d 1a3 123\n 79d 9h4 64'
675+
self.assert_(result == expected)
676+
677+
df = DataFrame({'id1': {0: np.nan, 1: '9h4'}, 'id2': {0: np.nan, 1: 'd67'},
678+
'id3': {0: np.nan, 1: '79d'}, 'value': {0: 123, 1: 64}})
679+
680+
y = df.set_index(['id1','id2','id3'])
681+
result = y.to_string()
682+
expected = u' value\nid1 id2 id3 \nNaN NaN NaN 123\n9h4 d67 79d 64'
683+
self.assert_(result == expected)
684+
669685
def test_to_string(self):
670686
from pandas import read_table
671687
import re

0 commit comments

Comments
 (0)