Skip to content

Commit 2a14ed7

Browse files
committed
Merge pull request #5544 from jreback/series_del
BUG: Bug in delitem on a Series (GH5542)
2 parents 4d0632b + 9e4765f commit 2a14ed7

File tree

3 files changed

+45
-13
lines changed

3 files changed

+45
-13
lines changed

doc/source/release.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -809,6 +809,7 @@ Bug Fixes
809809
- Fixed various setitem with 1d ndarray that does not have a matching
810810
length to the indexer (:issue:`5508`)
811811
- Bug in getitem with a multi-index and ``iloc`` (:issue:`5528`)
812+
- Bug in delitem on a Series (:issue:`5542`)
812813

813814
pandas 0.12.0
814815
-------------

pandas/core/internals.py

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1969,7 +1969,7 @@ def ndim(self):
19691969
self._ndim = len(self.axes)
19701970
return self._ndim
19711971

1972-
def set_axis(self, axis, value, maybe_rename=True, check_axis=True):
1972+
def _set_axis(self, axis, value, check_axis=True):
19731973
cur_axis = self.axes[axis]
19741974
value = _ensure_index(value)
19751975

@@ -1980,6 +1980,10 @@ def set_axis(self, axis, value, maybe_rename=True, check_axis=True):
19801980

19811981
self.axes[axis] = value
19821982
self._shape = None
1983+
return cur_axis, value
1984+
1985+
def set_axis(self, axis, value, maybe_rename=True, check_axis=True):
1986+
cur_axis, value = self._set_axis(axis, value, check_axis)
19831987

19841988
if axis == 0:
19851989

@@ -3473,24 +3477,22 @@ def reindex_axis0_with_method(self, new_axis, indexer=None, method=None,
34733477
return self.reindex(new_axis, indexer=indexer, method=method,
34743478
fill_value=fill_value, limit=limit, copy=copy)
34753479

3480+
def _delete_from_block(self, i, item):
3481+
super(SingleBlockManager, self)._delete_from_block(i, item)
3482+
3483+
# reset our state
3484+
self._block = self.blocks[0] if len(self.blocks) else make_block(np.array([],dtype=self._block.dtype),[],[])
3485+
self._values = self._block.values
3486+
34763487
def get_slice(self, slobj, raise_on_error=False):
34773488
if raise_on_error:
34783489
_check_slice_bounds(slobj, self.index)
34793490
return self.__class__(self._block._slice(slobj),
34803491
self.index._getitem_slice(slobj), fastpath=True)
34813492

3482-
def set_axis(self, axis, value):
3483-
cur_axis = self.axes[axis]
3484-
value = _ensure_index(value)
3485-
3486-
if len(value) != len(cur_axis):
3487-
raise ValueError('Length mismatch: Expected axis has %d elements, '
3488-
'new values have %d elements' % (len(cur_axis),
3489-
len(value)))
3490-
3491-
self.axes[axis] = value
3492-
self._shape = None
3493-
self._block.set_ref_items(self.items, maybe_rename=True)
3493+
def set_axis(self, axis, value, maybe_rename=True, check_axis=True):
3494+
cur_axis, value = self._set_axis(axis, value, check_axis)
3495+
self._block.set_ref_items(self.items, maybe_rename=maybe_rename)
34943496

34953497
def set_ref_items(self, ref_items, maybe_rename=True):
34963498
""" we can optimize and our ref_locs are always equal to ref_items """

pandas/tests/test_series.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,35 @@ def test_combine_first_dt64(self):
113113
xp = Series([datetime(2010, 1, 1), '2011'])
114114
assert_series_equal(rs, xp)
115115

116+
def test_delitem(self):
117+
118+
# GH 5542
119+
# should delete the item inplace
120+
s = Series(lrange(5))
121+
del s[0]
122+
123+
expected = Series(lrange(1,5),index=lrange(1,5))
124+
assert_series_equal(s, expected)
125+
126+
del s[1]
127+
expected = Series(lrange(2,5),index=lrange(2,5))
128+
assert_series_equal(s, expected)
129+
130+
# empty
131+
s = Series()
132+
def f():
133+
del s[0]
134+
self.assertRaises(KeyError, f)
135+
136+
# only 1 left, del, add, del
137+
s = Series(1)
138+
del s[0]
139+
assert_series_equal(s, Series(dtype='int64'))
140+
s[0] = 1
141+
assert_series_equal(s, Series(1))
142+
del s[0]
143+
assert_series_equal(s, Series(dtype='int64'))
144+
116145
def test_getitem_preserve_name(self):
117146
result = self.ts[self.ts > 0]
118147
self.assertEquals(result.name, self.ts.name)

0 commit comments

Comments
 (0)