@@ -417,6 +417,85 @@ def test_append(self):
417
417
store .append ('df' , df )
418
418
tm .assert_frame_equal (store ['df' ], df )
419
419
420
+ def test_append_some_nans (self ):
421
+
422
+ with ensure_clean (self .path ) as store :
423
+ df = DataFrame ({'A' : Series (np .random .randn (20 )).astype ('int32' ),
424
+ 'A1' : np .random .randn (20 ),
425
+ 'A2' : np .random .randn (20 ),
426
+ 'B' : 'foo' , 'C' : 'bar' , 'D' : Timestamp ("20010101" ), 'E' : datetime .datetime (2001 ,1 ,2 ,0 ,0 ) },
427
+ index = np .arange (20 ))
428
+ # some nans
429
+ store .remove ('df1' )
430
+ df .ix [0 :15 ,['A1' ,'B' ,'D' ,'E' ]] = np .nan
431
+ store .append ('df1' , df [:10 ])
432
+ store .append ('df1' , df [10 :])
433
+ tm .assert_frame_equal (store ['df1' ], df )
434
+
435
+ # first column
436
+ df1 = df .copy ()
437
+ df1 .ix [:,'A1' ] = np .nan
438
+ store .remove ('df1' )
439
+ store .append ('df1' , df1 [:10 ])
440
+ store .append ('df1' , df1 [10 :])
441
+ tm .assert_frame_equal (store ['df1' ], df1 )
442
+
443
+ # 2nd column
444
+ df2 = df .copy ()
445
+ df2 .ix [:,'A2' ] = np .nan
446
+ store .remove ('df2' )
447
+ store .append ('df2' , df2 [:10 ])
448
+ store .append ('df2' , df2 [10 :])
449
+ tm .assert_frame_equal (store ['df2' ], df2 )
450
+
451
+ # datetimes
452
+ df3 = df .copy ()
453
+ df3 .ix [:,'E' ] = np .nan
454
+ store .remove ('df3' )
455
+ store .append ('df3' , df3 [:10 ])
456
+ store .append ('df3' , df3 [10 :])
457
+ tm .assert_frame_equal (store ['df3' ], df3 )
458
+
459
+ ##### THIS IS A BUG, should not drop these all-nan rows
460
+ ##### BUT need to store the index which we don't want to do....
461
+ # nan some entire rows
462
+ df = DataFrame ({'A1' : np .random .randn (20 ),
463
+ 'A2' : np .random .randn (20 )},
464
+ index = np .arange (20 ))
465
+
466
+ store .remove ('df4' )
467
+ df .ix [0 :15 ,:] = np .nan
468
+ store .append ('df4' , df [:10 ])
469
+ store .append ('df4' , df [10 :])
470
+ tm .assert_frame_equal (store ['df4' ], df [- 4 :])
471
+ self .assert_ (store .get_storer ('df4' ).nrows == 4 )
472
+
473
+ # nan some entire rows (string are still written!)
474
+ df = DataFrame ({'A1' : np .random .randn (20 ),
475
+ 'A2' : np .random .randn (20 ),
476
+ 'B' : 'foo' , 'C' : 'bar' },
477
+ index = np .arange (20 ))
478
+
479
+ store .remove ('df5' )
480
+ df .ix [0 :15 ,:] = np .nan
481
+ store .append ('df5' , df [:10 ])
482
+ store .append ('df5' , df [10 :])
483
+ tm .assert_frame_equal (store ['df5' ], df )
484
+ self .assert_ (store .get_storer ('df5' ).nrows == 20 )
485
+
486
+ # nan some entire rows (but since we have dates they are still written!)
487
+ df = DataFrame ({'A1' : np .random .randn (20 ),
488
+ 'A2' : np .random .randn (20 ),
489
+ 'B' : 'foo' , 'C' : 'bar' , 'D' : Timestamp ("20010101" ), 'E' : datetime .datetime (2001 ,1 ,2 ,0 ,0 ) },
490
+ index = np .arange (20 ))
491
+
492
+ store .remove ('df6' )
493
+ df .ix [0 :15 ,:] = np .nan
494
+ store .append ('df6' , df [:10 ])
495
+ store .append ('df6' , df [10 :])
496
+ tm .assert_frame_equal (store ['df6' ], df )
497
+ self .assert_ (store .get_storer ('df6' ).nrows == 20 )
498
+
420
499
def test_append_frame_column_oriented (self ):
421
500
422
501
with ensure_clean (self .path ) as store :
0 commit comments