@@ -417,6 +417,85 @@ def test_append(self):
417417 store .append ('df' , df )
418418 tm .assert_frame_equal (store ['df' ], df )
419419
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+
420499 def test_append_frame_column_oriented (self ):
421500
422501 with ensure_clean (self .path ) as store :
0 commit comments