@@ -388,6 +388,35 @@ def test_preserve_index_type(self, sort, index):
388
388
expected = pd .DataFrame ([[1 , 2 , np .nan ], [3 , 4 , 5 ]], columns = index )
389
389
assert_frame_equal (result , expected )
390
390
391
+ def test_ignore_empty_index_dtype (self , sort ):
392
+ # When one of the indexes is empty and of object dtype, it should be
393
+ # ignored in the result (as empty).
394
+
395
+ df1 = pd .DataFrame ()
396
+ df2 = pd .DataFrame ([[11 , 12 , 13 ]], columns = [1 , 2 , 3 ])
397
+
398
+ result1 = df1 .append (df2 , sort = sort )
399
+ result2 = df2 .append (df1 , sort = sort )
400
+
401
+ expected = df2 .copy ()
402
+ assert_frame_equal (result1 , expected )
403
+ assert_frame_equal (result2 , expected )
404
+
405
+ def test_account_empty_index_dtype (self , sort ):
406
+ # When one of the indexes is empty and of dtype different from object,
407
+ # it should not be ignored when calculating the result dtype.
408
+
409
+ df1 = pd .DataFrame (columns = pd .Float64Index ([]))
410
+ df2 = pd .DataFrame ([[11 , 12 , 13 ]], columns = [1 , 2 , 3 ])
411
+
412
+ result1 = df1 .append (df2 , sort = sort )
413
+ result2 = df2 .append (df1 , sort = sort )
414
+
415
+ expected = df2 .copy ()
416
+ expected .columns = [1.0 , 2.0 , 3.0 ]
417
+ assert_frame_equal (result1 , expected )
418
+ assert_frame_equal (result2 , expected )
419
+
391
420
@pytest .mark .parametrize ('index2' , indexes , ids = cls_name )
392
421
@pytest .mark .parametrize ('index1' , indexes , ids = cls_name )
393
422
def test_preserve_index_values_without_sort (self , index1 , index2 ):
@@ -751,6 +780,35 @@ def test_preserve_index_name(self, sort, idx_name1, idx_name2, idx_name3):
751
780
expected .index .name = idx_name1
752
781
assert_frame_equal (result , expected )
753
782
783
+ def test_ignore_empty_index_dtype (self , sort ):
784
+ # When one of the indexes is empty and of object dtype, it should be
785
+ # ignored in the result (as empty).
786
+
787
+ df1 = pd .DataFrame ()
788
+ df2 = pd .DataFrame ([[11 ], [12 ], [13 ]], index = [1 , 2 , 3 ])
789
+
790
+ result1 = df1 .append (df2 , sort = sort )
791
+ result2 = df2 .append (df1 , sort = sort )
792
+
793
+ expected = df2 .copy ()
794
+ assert_frame_equal (result1 , expected )
795
+ assert_frame_equal (result2 , expected )
796
+
797
+ def test_account_empty_index_dtype (self , sort ):
798
+ # When one of the indexes is empty and of dtype different from object,
799
+ # it should not be ignored when calculating the result dtype.
800
+
801
+ df1 = pd .DataFrame (index = pd .Float64Index ([]))
802
+ df2 = pd .DataFrame ([[11 ], [12 ], [13 ]], index = [1 , 2 , 3 ])
803
+
804
+ result1 = df1 .append (df2 , sort = sort )
805
+ result2 = df2 .append (df1 , sort = sort )
806
+
807
+ expected = df2 .copy ()
808
+ expected .index = [1.0 , 2.0 , 3.0 ]
809
+ assert_frame_equal (result1 , expected )
810
+ assert_frame_equal (result2 , expected )
811
+
754
812
@pytest .mark .parametrize ('index' , indexes , ids = cls_name )
755
813
def test_preserve_index_type (self , sort , index ):
756
814
# when there's only one index type in the inputs,
0 commit comments