@@ -48,12 +48,17 @@ def set_engine(engine, ext):
4848 set_option (option_name , prev_engine ) # Roll back option change
4949
5050
51- @td .skip_if_no ("xlrd" )
52- @td .skip_if_no ("odf" )
53- @pytest .mark .parametrize ("ext" , [".xls" , ".xlsx" , ".xlsm" , ".ods" ])
51+ @pytest .mark .parametrize (
52+ "ext" ,
53+ [
54+ pytest .param (".xlsx" , marks = [td .skip_if_no ("openpyxl" ), td .skip_if_no ("xlrd" )]),
55+ pytest .param (".xlsm" , marks = [td .skip_if_no ("openpyxl" ), td .skip_if_no ("xlrd" )]),
56+ pytest .param (".xls" , marks = [td .skip_if_no ("xlwt" ), td .skip_if_no ("xlrd" )]),
57+ pytest .param (".xlsx" , marks = [td .skip_if_no ("xlsxwriter" ), td .skip_if_no ("xlrd" )]),
58+ pytest .param (".ods" , marks = td .skip_if_no ("odf" )),
59+ ],
60+ )
5461class TestRoundTrip :
55- @td .skip_if_no ("xlwt" )
56- @td .skip_if_no ("openpyxl" )
5762 @pytest .mark .parametrize (
5863 "header,expected" ,
5964 [(None , DataFrame ([np .nan ] * 4 )), (0 , DataFrame ({"Unnamed: 0" : [np .nan ] * 3 }))],
@@ -69,8 +74,6 @@ def test_read_one_empty_col_no_header(self, ext, header, expected):
6974
7075 tm .assert_frame_equal (result , expected )
7176
72- @td .skip_if_no ("xlwt" )
73- @td .skip_if_no ("openpyxl" )
7477 @pytest .mark .parametrize (
7578 "header,expected" ,
7679 [(None , DataFrame ([0 ] + [np .nan ] * 4 )), (0 , DataFrame ([np .nan ] * 4 ))],
@@ -85,8 +88,6 @@ def test_read_one_empty_col_with_header(self, ext, header, expected):
8588
8689 tm .assert_frame_equal (result , expected )
8790
88- @td .skip_if_no ("openpyxl" )
89- @td .skip_if_no ("xlwt" )
9091 def test_set_column_names_in_parameter (self , ext ):
9192 # GH 12870 : pass down column names associated with
9293 # keyword argument names
@@ -110,8 +111,6 @@ def test_set_column_names_in_parameter(self, ext):
110111 tm .assert_frame_equal (xlsdf_no_head , refdf )
111112 tm .assert_frame_equal (xlsdf_with_head , refdf )
112113
113- @td .skip_if_no ("xlwt" )
114- @td .skip_if_no ("openpyxl" )
115114 def test_creating_and_reading_multiple_sheets (self , ext ):
116115 # see gh-9450
117116 #
@@ -136,7 +135,6 @@ def tdf(col_sheet_name):
136135 for s in sheets :
137136 tm .assert_frame_equal (dfs [s ], dfs_returned [s ])
138137
139- @td .skip_if_no ("xlsxwriter" )
140138 def test_read_excel_multiindex_empty_level (self , ext ):
141139 # see gh-12453
142140 with tm .ensure_clean (ext ) as path :
@@ -184,7 +182,6 @@ def test_read_excel_multiindex_empty_level(self, ext):
184182 actual = pd .read_excel (path , header = [0 , 1 ], index_col = 0 )
185183 tm .assert_frame_equal (actual , expected )
186184
187- @td .skip_if_no ("xlsxwriter" )
188185 @pytest .mark .parametrize ("c_idx_names" , [True , False ])
189186 @pytest .mark .parametrize ("r_idx_names" , [True , False ])
190187 @pytest .mark .parametrize ("c_idx_levels" , [1 , 3 ])
@@ -234,8 +231,6 @@ def test_excel_multindex_roundtrip(
234231 )
235232 tm .assert_frame_equal (df , act , check_names = check_names )
236233
237- @td .skip_if_no ("xlwt" )
238- @td .skip_if_no ("openpyxl" )
239234 def test_read_excel_parse_dates (self , ext ):
240235 # see gh-11544, gh-12051
241236 df = DataFrame (
@@ -290,14 +285,13 @@ def test_multiindex_interval_datetimes(self, ext):
290285 tm .assert_frame_equal (result , expected )
291286
292287
293- @td .skip_if_no ("xlrd" )
294288@pytest .mark .parametrize (
295289 "engine,ext" ,
296290 [
297- pytest .param ("openpyxl" , ".xlsx" , marks = td .skip_if_no ("openpyxl" )),
298- pytest .param ("openpyxl" , ".xlsm" , marks = td .skip_if_no ("openpyxl" )),
299- pytest .param ("xlwt" , ".xls" , marks = td .skip_if_no ("xlwt" )),
300- pytest .param ("xlsxwriter" , ".xlsx" , marks = td .skip_if_no ("xlsxwriter" )),
291+ pytest .param ("openpyxl" , ".xlsx" , marks = [ td .skip_if_no ("openpyxl" ), td . skip_if_no ( "xlrd" )] ),
292+ pytest .param ("openpyxl" , ".xlsm" , marks = [ td .skip_if_no ("openpyxl" ), td . skip_if_no ( "xlrd" )] ),
293+ pytest .param ("xlwt" , ".xls" , marks = [ td .skip_if_no ("xlwt" ), td . skip_if_no ( "xlrd" )] ),
294+ pytest .param ("xlsxwriter" , ".xlsx" , marks = [ td .skip_if_no ("xlsxwriter" ), td . skip_if_no ( "xlrd" )] ),
301295 pytest .param ("odf" , ".ods" , marks = td .skip_if_no ("odf" )),
302296 ],
303297)
@@ -322,8 +316,6 @@ def test_excel_sheet_size(self, path):
322316 col_df .to_excel (path )
323317
324318 def test_excel_sheet_by_name_raise (self , path , engine ):
325- import xlrd
326-
327319 gt = DataFrame (np .random .randn (10 , 2 ))
328320 gt .to_excel (path )
329321
@@ -337,6 +329,7 @@ def test_excel_sheet_by_name_raise(self, path, engine):
337329 with pytest .raises (ValueError , match = msg ):
338330 pd .read_excel (xl , "0" )
339331 else :
332+ import xlrd
340333 msg = "No sheet named <'0'>"
341334 with pytest .raises (xlrd .XLRDError , match = msg ):
342335 pd .read_excel (xl , "0" )
@@ -1173,9 +1166,7 @@ def test_bytes_io(self, engine):
11731166 writer .save ()
11741167
11751168 bio .seek (0 )
1176- if engine != "odf" :
1177- engine = None
1178- reread_df = pd .read_excel (bio , engine = engine , index_col = 0 )
1169+ reread_df = pd .read_excel (bio , index_col = 0 )
11791170 tm .assert_frame_equal (df , reread_df )
11801171
11811172 def test_write_lists_dict (self , path ):
@@ -1219,19 +1210,15 @@ def test_path_path_lib(self, engine, ext):
12191210 df = tm .makeDataFrame ()
12201211 writer = partial (df .to_excel , engine = engine )
12211212
1222- if engine != "odf" :
1223- engine = None
1224- reader = partial (pd .read_excel , engine = engine , index_col = 0 )
1213+ reader = partial (pd .read_excel , index_col = 0 )
12251214 result = tm .round_trip_pathlib (writer , reader , path = f"foo{ ext } " )
12261215 tm .assert_frame_equal (result , df )
12271216
12281217 def test_path_local_path (self , engine , ext ):
12291218 df = tm .makeDataFrame ()
12301219 writer = partial (df .to_excel , engine = engine )
12311220
1232- if engine != "odf" :
1233- engine = None
1234- reader = partial (pd .read_excel , engine = engine , index_col = 0 )
1221+ reader = partial (pd .read_excel , index_col = 0 )
12351222 result = tm .round_trip_localpath (writer , reader , path = f"foo{ ext } " )
12361223 tm .assert_frame_equal (result , df )
12371224
0 commit comments