Skip to content

Commit 0bd296a

Browse files
committed
BUG: clear Series caches on consolidation, address GH #304
1 parent 2758eea commit 0bd296a

File tree

2 files changed

+26
-4
lines changed

2 files changed

+26
-4
lines changed

pandas/core/frame.py

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -641,17 +641,24 @@ def _get_columns(self):
641641

642642
def _set_columns(self, value):
643643
self._data.set_axis(0, value)
644-
self._series_cache.clear()
644+
self._clear_caches()
645645
columns = property(fset=_set_columns, fget=_get_columns)
646646

647647
def _get_index(self):
648648
return self._data.axes[1]
649649

650650
def _set_index(self, value):
651651
self._data.set_axis(1, value)
652-
self._series_cache.clear()
652+
self._clear_caches()
653653
index = property(fset=_set_index, fget=_get_index)
654654

655+
def _clear_caches(self):
656+
self._series_cache.clear()
657+
658+
def _consolidate_inplace(self):
659+
self._clear_caches()
660+
NDFrame._consolidate_inplace(self)
661+
655662
def as_matrix(self, columns=None):
656663
"""
657664
Convert the frame to its Numpy-array matrix representation. Columns
@@ -1479,11 +1486,11 @@ def rename(self, index=None, columns=None, copy=True):
14791486

14801487
def _rename_index_inplace(self, mapper):
14811488
self._data = self._data.rename_axis(mapper, axis=1)
1482-
self._series_cache.clear()
1489+
self._clear_caches()
14831490

14841491
def _rename_columns_inplace(self, mapper):
14851492
self._data = self._data.rename_items(mapper, copydata=False)
1486-
self._series_cache.clear()
1493+
self._clear_caches()
14871494

14881495
#----------------------------------------------------------------------
14891496
# Arithmetic / combination related

pandas/tests/test_frame.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,21 @@ def test_setitem_ambig(self):
238238
# self.assert_(dm.objects is not None)
239239
self.assert_(dm[2].dtype == np.object_)
240240

241+
def test_setitem_clear_caches(self):
242+
# GH #304
243+
df = DataFrame({'x': [1.1, 2.1, 3.1, 4.1], 'y': [5.1, 6.1, 7.1, 8.1]},
244+
index=[0,1,2,3])
245+
df.insert(2, 'z', np.nan)
246+
247+
# cache it
248+
foo = df['z']
249+
250+
df.ix[2:, 'z'] = 42
251+
252+
expected = Series([np.nan, np.nan, 42, 42], index=df.index)
253+
self.assert_(df['z'] is not foo)
254+
assert_series_equal(df['z'], expected)
255+
241256
def test_delitem_corner(self):
242257
f = self.frame.copy()
243258
del f['D']

0 commit comments

Comments
 (0)