Skip to content

Commit 6904dba

Browse files
committed
BUG: fix MultiIndex compatibility bugs described in #1534 post gutting internal array close #1534
1 parent b8df975 commit 6904dba

File tree

3 files changed

+17
-3
lines changed

3 files changed

+17
-3
lines changed

pandas/core/index.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -714,12 +714,12 @@ def get_indexer(self, target, method=None, limit=None):
714714

715715
if method == 'pad':
716716
assert(self.is_monotonic)
717-
indexer = self._engine.get_pad_indexer(target, limit)
717+
indexer = self._engine.get_pad_indexer(target.values, limit)
718718
elif method == 'backfill':
719719
assert(self.is_monotonic)
720-
indexer = self._engine.get_backfill_indexer(target, limit)
720+
indexer = self._engine.get_backfill_indexer(target.values, limit)
721721
elif method is None:
722-
indexer = self._engine.get_indexer(target)
722+
indexer = self._engine.get_indexer(target.values)
723723
else:
724724
raise ValueError('unrecognized method: %s' % method)
725725

@@ -1535,6 +1535,9 @@ def from_tuples(cls, tuples, sortorder=None, names=None):
15351535
raise Exception('Cannot infer number of levels from empty list')
15361536

15371537
if isinstance(tuples, np.ndarray):
1538+
if isinstance(tuples, Index):
1539+
tuples = tuples.values
1540+
15381541
arrays = list(lib.tuples_to_object_array(tuples).T)
15391542
elif isinstance(tuples, list):
15401543
arrays = list(lib.to_object_array_tuples(tuples).T)

pandas/tests/test_index.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -939,6 +939,10 @@ def test_legacy_v2_unpickle(self):
939939
assert_almost_equal(res, exp)
940940
assert_almost_equal(exp, exp2)
941941

942+
def test_from_tuples_index_values(self):
943+
result = MultiIndex.from_tuples(self.index)
944+
self.assert_((result.values == self.index.values).all())
945+
942946
def test_contains(self):
943947
self.assert_(('foo', 'two') in self.index)
944948
self.assert_(('bar', 'two') not in self.index)

pandas/tests/test_multilevel.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1376,6 +1376,13 @@ def test_unicode_repr_issues(self):
13761376
# NumPy bug
13771377
# repr(index.get_level_values(1))
13781378

1379+
def test_dataframe_insert_column_all_na(self):
1380+
# GH #1534
1381+
mix = MultiIndex.from_tuples([('1a', '2a'), ('1a', '2b'), ('1a', '2c')])
1382+
df = DataFrame([[1,2],[3,4],[5,6]], index=mix)
1383+
s = Series({(1,1): 1, (1,2): 2})
1384+
df['new'] = s
1385+
self.assert_(df['new'].isnull().all())
13791386

13801387
if __name__ == '__main__':
13811388

0 commit comments

Comments
 (0)