@@ -48,12 +48,17 @@ def set_engine(engine, ext):
48
48
set_option (option_name , prev_engine ) # Roll back option change
49
49
50
50
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
+ )
54
61
class TestRoundTrip :
55
- @td .skip_if_no ("xlwt" )
56
- @td .skip_if_no ("openpyxl" )
57
62
@pytest .mark .parametrize (
58
63
"header,expected" ,
59
64
[(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):
69
74
70
75
tm .assert_frame_equal (result , expected )
71
76
72
- @td .skip_if_no ("xlwt" )
73
- @td .skip_if_no ("openpyxl" )
74
77
@pytest .mark .parametrize (
75
78
"header,expected" ,
76
79
[(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):
85
88
86
89
tm .assert_frame_equal (result , expected )
87
90
88
- @td .skip_if_no ("openpyxl" )
89
- @td .skip_if_no ("xlwt" )
90
91
def test_set_column_names_in_parameter (self , ext ):
91
92
# GH 12870 : pass down column names associated with
92
93
# keyword argument names
@@ -110,8 +111,6 @@ def test_set_column_names_in_parameter(self, ext):
110
111
tm .assert_frame_equal (xlsdf_no_head , refdf )
111
112
tm .assert_frame_equal (xlsdf_with_head , refdf )
112
113
113
- @td .skip_if_no ("xlwt" )
114
- @td .skip_if_no ("openpyxl" )
115
114
def test_creating_and_reading_multiple_sheets (self , ext ):
116
115
# see gh-9450
117
116
#
@@ -136,7 +135,6 @@ def tdf(col_sheet_name):
136
135
for s in sheets :
137
136
tm .assert_frame_equal (dfs [s ], dfs_returned [s ])
138
137
139
- @td .skip_if_no ("xlsxwriter" )
140
138
def test_read_excel_multiindex_empty_level (self , ext ):
141
139
# see gh-12453
142
140
with tm .ensure_clean (ext ) as path :
@@ -184,7 +182,6 @@ def test_read_excel_multiindex_empty_level(self, ext):
184
182
actual = pd .read_excel (path , header = [0 , 1 ], index_col = 0 )
185
183
tm .assert_frame_equal (actual , expected )
186
184
187
- @td .skip_if_no ("xlsxwriter" )
188
185
@pytest .mark .parametrize ("c_idx_names" , [True , False ])
189
186
@pytest .mark .parametrize ("r_idx_names" , [True , False ])
190
187
@pytest .mark .parametrize ("c_idx_levels" , [1 , 3 ])
@@ -234,8 +231,6 @@ def test_excel_multindex_roundtrip(
234
231
)
235
232
tm .assert_frame_equal (df , act , check_names = check_names )
236
233
237
- @td .skip_if_no ("xlwt" )
238
- @td .skip_if_no ("openpyxl" )
239
234
def test_read_excel_parse_dates (self , ext ):
240
235
# see gh-11544, gh-12051
241
236
df = DataFrame (
@@ -290,14 +285,13 @@ def test_multiindex_interval_datetimes(self, ext):
290
285
tm .assert_frame_equal (result , expected )
291
286
292
287
293
- @td .skip_if_no ("xlrd" )
294
288
@pytest .mark .parametrize (
295
289
"engine,ext" ,
296
290
[
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" )] ),
301
295
pytest .param ("odf" , ".ods" , marks = td .skip_if_no ("odf" )),
302
296
],
303
297
)
@@ -322,8 +316,6 @@ def test_excel_sheet_size(self, path):
322
316
col_df .to_excel (path )
323
317
324
318
def test_excel_sheet_by_name_raise (self , path , engine ):
325
- import xlrd
326
-
327
319
gt = DataFrame (np .random .randn (10 , 2 ))
328
320
gt .to_excel (path )
329
321
@@ -337,6 +329,7 @@ def test_excel_sheet_by_name_raise(self, path, engine):
337
329
with pytest .raises (ValueError , match = msg ):
338
330
pd .read_excel (xl , "0" )
339
331
else :
332
+ import xlrd
340
333
msg = "No sheet named <'0'>"
341
334
with pytest .raises (xlrd .XLRDError , match = msg ):
342
335
pd .read_excel (xl , "0" )
@@ -1173,9 +1166,7 @@ def test_bytes_io(self, engine):
1173
1166
writer .save ()
1174
1167
1175
1168
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 )
1179
1170
tm .assert_frame_equal (df , reread_df )
1180
1171
1181
1172
def test_write_lists_dict (self , path ):
@@ -1219,19 +1210,15 @@ def test_path_path_lib(self, engine, ext):
1219
1210
df = tm .makeDataFrame ()
1220
1211
writer = partial (df .to_excel , engine = engine )
1221
1212
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 )
1225
1214
result = tm .round_trip_pathlib (writer , reader , path = f"foo{ ext } " )
1226
1215
tm .assert_frame_equal (result , df )
1227
1216
1228
1217
def test_path_local_path (self , engine , ext ):
1229
1218
df = tm .makeDataFrame ()
1230
1219
writer = partial (df .to_excel , engine = engine )
1231
1220
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 )
1235
1222
result = tm .round_trip_localpath (writer , reader , path = f"foo{ ext } " )
1236
1223
tm .assert_frame_equal (result , df )
1237
1224
0 commit comments