@@ -193,7 +193,6 @@ def test_setitem_list(self):
193
193
194
194
assert_series_equal(self.frame['B'], data['A'], check_names=False)
195
195
assert_series_equal(self.frame['A'], data['B'], check_names=False)
196
-
197
196
with assertRaisesRegexp(ValueError, 'Columns must be same length as key'):
198
197
data[['A']] = self.frame[['A', 'B']]
199
198
with assertRaisesRegexp(ValueError, 'Length of values does not match '
@@ -560,14 +559,14 @@ def test_setitem(self):
560
559
self.frame['col8'] = 'foo'
561
560
assert((self.frame['col8'] == 'foo').all())
562
561
563
- # this is partially a view (e.g. some blocks are view)
564
- # so raise/warn
562
+ # Changes should not propageate
565
563
smaller = self.frame[:2]
566
564
def f():
567
- smaller['col10'] = ['1', '2']
568
- self.assertRaises(com.SettingWithCopyError, f)
569
- self.assertEqual(smaller['col10'].dtype, np.object_)
570
- self.assertTrue((smaller['col10'] == ['1', '2']).all())
565
+ smaller['col0'] = ['1', '2']
566
+ f()
567
+ self.assertEqual(smaller['col0'].dtype, np.object_)
568
+ self.assertTrue((smaller['col0'] == ['1', '2']).all())
569
+ self.assertNotEqual(self.frame[:2].col0.dtype, np.object_)
571
570
572
571
# with a dtype
573
572
for dtype in ['int32','int64','float32','float64']:
@@ -1014,13 +1013,11 @@ def test_fancy_getitem_slice_mixed(self):
1014
1013
sliced = self.mixed_frame.ix[:, -3:]
1015
1014
self.assertEqual(sliced['D'].dtype, np.float64)
1016
1015
1017
- # get view with single block
1018
- # setting it triggers setting with copy
1016
+ # Should never act as view due to copy on write
1019
1017
sliced = self.frame.ix[:, -3:]
1020
1018
def f():
1021
- sliced['C'] = 4.
1022
- self.assertRaises(com.SettingWithCopyError, f)
1023
- self.assertTrue((self.frame['C'] == 4).all())
1019
+ sliced['C'] = 4
1020
+ self.assertTrue((self.frame['C'] != 4).all())
1024
1021
1025
1022
def test_fancy_setitem_int_labels(self):
1026
1023
# integer index defers to label-based indexing
@@ -1819,14 +1816,12 @@ def test_irow(self):
1819
1816
expected = df.ix[8:14]
1820
1817
assert_frame_equal(result, expected)
1821
1818
1822
- # verify slice is view
1823
- # setting it makes it raise/warn
1819
+ # verify changes on slices never propogate
1824
1820
def f():
1825
1821
result[2] = 0.
1826
- self.assertRaises(com.SettingWithCopyError, f)
1827
1822
exp_col = df[2].copy()
1828
1823
exp_col[4:8] = 0.
1829
- assert_series_equal( df[2], exp_col)
1824
+ self.assertFalse(( df[2] == exp_col).all() )
1830
1825
1831
1826
# list of integers
1832
1827
result = df.iloc[[1, 2, 4, 6]]
@@ -1854,12 +1849,10 @@ def test_icol(self):
1854
1849
expected = df.ix[:, 8:14]
1855
1850
assert_frame_equal(result, expected)
1856
1851
1857
- # verify slice is view
1858
- # and that we are setting a copy
1852
+ # Verify setting on view doesn't propogate
1859
1853
def f():
1860
1854
result[8] = 0.
1861
- self.assertRaises(com.SettingWithCopyError, f)
1862
- self.assertTrue((df[8] == 0).all())
1855
+ self.assertTrue((df[8] != 0).all())
1863
1856
1864
1857
# list of integers
1865
1858
result = df.iloc[:, [1, 2, 4, 6]]
@@ -4335,12 +4328,6 @@ def test_constructor_with_datetime_tz(self):
4335
4328
assert_series_equal(df['D'],Series(idx,name='D'))
4336
4329
del df['D']
4337
4330
4338
- # assert that A & C are not sharing the same base (e.g. they
4339
- # are copies)
4340
- b1 = df._data.blocks[1]
4341
- b2 = df._data.blocks[2]
4342
- self.assertTrue(b1.values.equals(b2.values))
4343
- self.assertFalse(id(b1.values.values.base) == id(b2.values.values.base))
4344
4331
4345
4332
# with nan
4346
4333
df2 = df.copy()
0 commit comments