@@ -1275,20 +1275,61 @@ def test_setitem_single_column_mixed_datetime(self):
1275
1275
df .ix ['d' , :] = nan
1276
1276
self .assert_ (com .isnull (df .ix ['c' , :]).all () == False )
1277
1277
1278
+ # as of GH 3216 this will now work!
1278
1279
# try to set with a list like item
1279
- self .assertRaises (
1280
- Exception , df .ix .__setitem__ , ('d' , 'timestamp' ), [nan ])
1280
+ # self.assertRaises(
1281
+ # Exception, df.ix.__setitem__, ('d', 'timestamp'), [nan])
1281
1282
1282
1283
def test_setitem_frame (self ):
1283
1284
piece = self .frame .ix [:2 , ['A' , 'B' ]]
1284
1285
self .frame .ix [- 2 :, ['A' , 'B' ]] = piece .values
1285
1286
assert_almost_equal (self .frame .ix [- 2 :, ['A' , 'B' ]].values ,
1286
1287
piece .values )
1287
1288
1289
+ # GH 3216
1290
+
1291
+ # already aligned
1292
+ f = self .mixed_frame .copy ()
1293
+ piece = DataFrame ([[ 1 , 2 ], [3 , 4 ]], index = f .index [0 :2 ],columns = ['A' , 'B' ])
1294
+ key = (slice (None ,2 ), ['A' , 'B' ])
1295
+ f .ix [key ] = piece
1296
+ assert_almost_equal (f .ix [0 :2 , ['A' , 'B' ]].values ,
1297
+ piece .values )
1298
+
1299
+ # rows unaligned
1300
+ f = self .mixed_frame .copy ()
1301
+ piece = DataFrame ([[ 1 , 2 ], [3 , 4 ], [5 , 6 ], [7 , 8 ]], index = list (f .index [0 :2 ]) + ['foo' ,'bar' ],columns = ['A' , 'B' ])
1302
+ key = (slice (None ,2 ), ['A' , 'B' ])
1303
+ f .ix [key ] = piece
1304
+ assert_almost_equal (f .ix [0 :2 :, ['A' , 'B' ]].values ,
1305
+ piece .values [0 :2 ])
1306
+
1307
+ # key is unaligned with values
1308
+ f = self .mixed_frame .copy ()
1309
+ piece = f .ix [:2 , ['A' ]]
1310
+ key = (slice (- 2 , None ), ['A' , 'B' ])
1311
+ f .ix [key ] = piece
1312
+ piece ['B' ] = np .nan
1313
+ assert_almost_equal (f .ix [- 2 :, ['A' , 'B' ]].values ,
1314
+ piece .values )
1315
+
1316
+ # ndarray
1317
+ f = self .mixed_frame .copy ()
1288
1318
piece = self .mixed_frame .ix [:2 , ['A' , 'B' ]]
1289
- f = self .mixed_frame .ix .__setitem__
1290
1319
key = (slice (- 2 , None ), ['A' , 'B' ])
1291
- self .assertRaises (ValueError , f , key , piece )
1320
+ f .ix [key ] = piece .values
1321
+ assert_almost_equal (f .ix [- 2 :, ['A' , 'B' ]].values ,
1322
+ piece .values )
1323
+
1324
+
1325
+ # needs upcasting
1326
+ df = DataFrame ([[1 ,2 ,'foo' ],[3 ,4 ,'bar' ]],columns = ['A' ,'B' ,'C' ])
1327
+ df2 = df .copy ()
1328
+ df2 .ix [:,['A' ,'B' ]] = df .ix [:,['A' ,'B' ]]+ 0.5
1329
+ expected = df .reindex (columns = ['A' ,'B' ])
1330
+ expected += 0.5
1331
+ expected ['C' ] = df ['C' ]
1332
+ assert_frame_equal (df2 , expected )
1292
1333
1293
1334
def test_setitem_frame_align (self ):
1294
1335
piece = self .frame .ix [:2 , ['A' , 'B' ]]
0 commit comments