@@ -870,22 +870,49 @@ def test_to_excel_multiindex_nan_label(self, merge_cells, tmp_excel):
870870 # Test for Issue 11328. If column indices are integers, make
871871 # sure they are handled correctly for either setting of
872872 # merge_cells
873- def test_to_excel_multiindex_cols (self , merge_cells , frame , tmp_excel ):
873+ def test_to_excel_multiindex_cols (self , merge_cells , tmp_excel ):
874+ # GH#11328
875+ frame = DataFrame (
876+ {
877+ "A" : [1 , 2 , 3 ],
878+ "B" : [4 , 5 , 6 ],
879+ "C" : [7 , 8 , 9 ],
880+ }
881+ )
874882 arrays = np .arange (len (frame .index ) * 2 , dtype = np .int64 ).reshape (2 , - 1 )
875883 new_index = MultiIndex .from_arrays (arrays , names = ["first" , "second" ])
876884 frame .index = new_index
877885
878- new_cols_index = MultiIndex .from_tuples ([(40 , 1 ), (40 , 2 ), (50 , 1 ), ( 50 , 2 ) ])
886+ new_cols_index = MultiIndex .from_tuples ([(40 , 1 ), (40 , 2 ), (50 , 1 )])
879887 frame .columns = new_cols_index
880- header = [0 , 1 ]
881-
882- # round trip
883888 frame .to_excel (tmp_excel , sheet_name = "test1" , merge_cells = merge_cells )
889+
890+ # Check round trip
884891 with ExcelFile (tmp_excel ) as reader :
885- df = pd .read_excel (
886- reader , sheet_name = "test1" , header = header , index_col = [0 , 1 ]
892+ result = pd .read_excel (
893+ reader , sheet_name = "test1" , header = [ 0 , 1 ] , index_col = [0 , 1 ]
887894 )
888- tm .assert_frame_equal (frame , df )
895+ tm .assert_frame_equal (result , frame )
896+
897+ # GH#60274
898+ # Check with header/index_col None to determine which cells were merged
899+ with ExcelFile (tmp_excel ) as reader :
900+ result = pd .read_excel (
901+ reader , sheet_name = "test1" , header = None , index_col = None
902+ )
903+ expected = DataFrame (
904+ {
905+ 0 : [np .nan , np .nan , "first" , 0 , 1 , 2 ],
906+ 1 : [np .nan , np .nan , "second" , 3 , 4 , 5 ],
907+ 2 : [40.0 , 1.0 , np .nan , 1.0 , 2.0 , 3.0 ],
908+ 3 : [np .nan , 2.0 , np .nan , 4.0 , 5.0 , 6.0 ],
909+ 4 : [50.0 , 1.0 , np .nan , 7.0 , 8.0 , 9.0 ],
910+ }
911+ )
912+ if not merge_cells :
913+ # MultiIndex column value is repeated
914+ expected .loc [0 , 3 ] = 40.0
915+ tm .assert_frame_equal (result , expected )
889916
890917 def test_to_excel_multiindex_dates (self , merge_cells , tmp_excel ):
891918 # try multiindex with dates
0 commit comments