@@ -338,6 +338,36 @@ def test_multiindex_interval_datetimes(self, tmp_excel):
338338 )
339339 tm .assert_frame_equal (result , expected )
340340
341+ @pytest .mark .parametrize ("merge_cells" , [True , False ])
342+ def test_excel_round_trip_with_periodindex (self , tmp_excel , merge_cells ):
343+ # GH#60099
344+ df = DataFrame (
345+ {"A" : [1 , 2 ]},
346+ index = MultiIndex .from_arrays (
347+ [
348+ period_range (start = "2006-10-06" , end = "2006-10-07" , freq = "D" ),
349+ ["X" , "Y" ],
350+ ],
351+ names = ["date" , "category" ],
352+ ),
353+ )
354+ df .to_excel (tmp_excel , merge_cells = merge_cells )
355+ result = pd .read_excel (tmp_excel , index_col = [0 , 1 ])
356+ expected = DataFrame (
357+ {"A" : [1 , 2 ]},
358+ MultiIndex .from_arrays (
359+ [
360+ [
361+ "2006-10-06 00:00:00" ,
362+ "2020-01-31 00:00:00" ,
363+ ],
364+ ["X" , "Y" ],
365+ ],
366+ names = ["date" , "category" ],
367+ ),
368+ )
369+ tm .assert_frame_equal (result , expected )
370+
341371
342372@pytest .mark .parametrize (
343373 "engine,ext" ,
@@ -1550,27 +1580,3 @@ def test_subclass_attr(klass):
15501580 attrs_base = {name for name in dir (ExcelWriter ) if not name .startswith ("_" )}
15511581 attrs_klass = {name for name in dir (klass ) if not name .startswith ("_" )}
15521582 assert not attrs_base .symmetric_difference (attrs_klass )
1553-
1554-
1555- @pytest .mark .parametrize ("merge_cells" , [True , False ])
1556- def test_excel_round_trip_with_periodindex (merge_cells , engine ):
1557- # GH#60099
1558- df = DataFrame (
1559- {"A" : [1 , 2 ]},
1560- index = MultiIndex .from_arrays (
1561- [period_range ("2023-01" , "2023-02" , freq = "M" ), ["X" , "Y" ]],
1562- names = ["date" , "category" ],
1563- ),
1564- )
1565-
1566- with BytesIO () as buffer :
1567- with ExcelWriter (buffer ) as writer :
1568- df .to_excel (writer , merge_cells = merge_cells )
1569-
1570- buffer .seek (0 )
1571- result_df = pd .read_excel (buffer , index_col = [0 , 1 ])
1572- result_df .index = result_df .index .set_levels (
1573- [result_df .index .levels [0 ].to_period ("M" ), result_df .index .levels [1 ]]
1574- )
1575-
1576- tm .assert_frame_equal (df , result_df )
0 commit comments