From 151861cd04f1c07494985f91b048fd065a776db8 Mon Sep 17 00:00:00 2001 From: michcio1234 Date: Thu, 17 Jan 2019 10:48:38 +0100 Subject: [PATCH 1/2] Fix behaviour when passing Index to __getitem__ --- sparsity/sparse_frame.py | 6 ++++-- sparsity/test/test_sparse_frame.py | 6 ++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/sparsity/sparse_frame.py b/sparsity/sparse_frame.py index 9574e5b..e2059dc 100644 --- a/sparsity/sparse_frame.py +++ b/sparsity/sparse_frame.py @@ -789,7 +789,7 @@ def drop_duplicate_idx(self, **kwargs): Returns ------- - dropeed: SparseFrame + dropped: SparseFrame """ mask = ~self.index.duplicated(**kwargs) return SparseFrame(self.data[mask], index=self.index.values[mask], @@ -798,7 +798,9 @@ def drop_duplicate_idx(self, **kwargs): def __getitem__(self, item): if item is None: raise ValueError('Cannot label index with a null key.') - if not isinstance(item, (tuple, list)): + if not isinstance(item, (pd.Series, np.ndarray, pd.Index, list, + tuple)): + # TODO: tuple probably should be a separate case item = [item] if len(item) > 0: return self.reindex_axis(item, axis=1) diff --git a/sparsity/test/test_sparse_frame.py b/sparsity/test/test_sparse_frame.py index 3295c95..32304bb 100644 --- a/sparsity/test/test_sparse_frame.py +++ b/sparsity/test/test_sparse_frame.py @@ -6,6 +6,7 @@ import numpy as np import pandas as pd +import pandas.testing as pdt import pytest from moto import mock_s3 from scipy import sparse @@ -589,6 +590,11 @@ def test_getitem(): sf[None] +def test_getitem_index(sample_frame_labels): + idx = pd.Index(list('ABC')) + pdt.assert_index_equal(idx, sample_frame_labels[idx].columns) + + def test_vstack(): frames = [] data = [] From 08aa3701fd01f091743a25c7b23efdd4bee0c5f3 Mon Sep 17 00:00:00 2001 From: michcio1234 Date: Sat, 19 Jan 2019 11:50:34 +0100 Subject: [PATCH 2/2] Address PR remarks --- sparsity/sparse_frame.py | 3 ++- sparsity/test/test_sparse_frame.py | 11 +++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/sparsity/sparse_frame.py b/sparsity/sparse_frame.py index e2059dc..6f015c6 100644 --- a/sparsity/sparse_frame.py +++ b/sparsity/sparse_frame.py @@ -800,7 +800,8 @@ def __getitem__(self, item): raise ValueError('Cannot label index with a null key.') if not isinstance(item, (pd.Series, np.ndarray, pd.Index, list, tuple)): - # TODO: tuple probably should be a separate case + # TODO: tuple probably should be a separate case as in Pandas + # where it is used with Multiindex item = [item] if len(item) > 0: return self.reindex_axis(item, axis=1) diff --git a/sparsity/test/test_sparse_frame.py b/sparsity/test/test_sparse_frame.py index 32304bb..44b21f0 100644 --- a/sparsity/test/test_sparse_frame.py +++ b/sparsity/test/test_sparse_frame.py @@ -576,6 +576,7 @@ def test_npz_io_s3(complex_example): def test_getitem(): id_ = np.identity(10) sf = SparseFrame(id_, columns=list('abcdefghij')) + assert sf['a'].data.todense()[0] == 1 assert sf['j'].data.todense()[9] == 1 assert np.all(sf[['a', 'b']].data.todense() == np.asmatrix(id_[:, [0, 1]])) @@ -589,10 +590,12 @@ def test_getitem(): with pytest.raises(ValueError): sf[None] - -def test_getitem_index(sample_frame_labels): - idx = pd.Index(list('ABC')) - pdt.assert_index_equal(idx, sample_frame_labels[idx].columns) + idx = pd.Index(list('abc')) + pdt.assert_index_equal(idx, sf[idx].columns) + pdt.assert_index_equal(idx, sf[idx.to_series()].columns) + pdt.assert_index_equal(idx, sf[idx.tolist()].columns) + pdt.assert_index_equal(idx, sf[tuple(idx)].columns) + pdt.assert_index_equal(idx, sf[idx.values].columns) def test_vstack():