@@ -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 }))],
@@ -71,8 +76,6 @@ def test_read_one_empty_col_no_header(self, ext, header, expected):
71
76
72
77
tm .assert_frame_equal (result , expected )
73
78
74
- @td .skip_if_no ("xlwt" )
75
- @td .skip_if_no ("openpyxl" )
76
79
@pytest .mark .parametrize (
77
80
"header,expected" ,
78
81
[(None , DataFrame ([0 ] + [np .nan ] * 4 )), (0 , DataFrame ([np .nan ] * 4 ))],
@@ -89,8 +92,6 @@ def test_read_one_empty_col_with_header(self, ext, header, expected):
89
92
90
93
tm .assert_frame_equal (result , expected )
91
94
92
- @td .skip_if_no ("openpyxl" )
93
- @td .skip_if_no ("xlwt" )
94
95
def test_set_column_names_in_parameter (self , ext ):
95
96
# GH 12870 : pass down column names associated with
96
97
# keyword argument names
@@ -117,8 +118,6 @@ def test_set_column_names_in_parameter(self, ext):
117
118
tm .assert_frame_equal (xlsdf_no_head , refdf )
118
119
tm .assert_frame_equal (xlsdf_with_head , refdf )
119
120
120
- @td .skip_if_no ("xlwt" )
121
- @td .skip_if_no ("openpyxl" )
122
121
def test_creating_and_reading_multiple_sheets (self , ext ):
123
122
# see gh-9450
124
123
#
@@ -143,7 +142,6 @@ def tdf(col_sheet_name):
143
142
for s in sheets :
144
143
tm .assert_frame_equal (dfs [s ], dfs_returned [s ])
145
144
146
- @td .skip_if_no ("xlsxwriter" )
147
145
def test_read_excel_multiindex_empty_level (self , ext ):
148
146
# see gh-12453
149
147
with tm .ensure_clean (ext ) as path :
@@ -191,7 +189,6 @@ def test_read_excel_multiindex_empty_level(self, ext):
191
189
actual = pd .read_excel (path , header = [0 , 1 ], index_col = 0 )
192
190
tm .assert_frame_equal (actual , expected )
193
191
194
- @td .skip_if_no ("xlsxwriter" )
195
192
@pytest .mark .parametrize ("c_idx_names" , [True , False ])
196
193
@pytest .mark .parametrize ("r_idx_names" , [True , False ])
197
194
@pytest .mark .parametrize ("c_idx_levels" , [1 , 3 ])
@@ -241,8 +238,6 @@ def test_excel_multindex_roundtrip(
241
238
)
242
239
tm .assert_frame_equal (df , act , check_names = check_names )
243
240
244
- @td .skip_if_no ("xlwt" )
245
- @td .skip_if_no ("openpyxl" )
246
241
def test_read_excel_parse_dates (self , ext ):
247
242
# see gh-11544, gh-12051
248
243
df = DataFrame (
@@ -297,14 +292,13 @@ def test_multiindex_interval_datetimes(self, ext):
297
292
tm .assert_frame_equal (result , expected )
298
293
299
294
300
- @td .skip_if_no ("xlrd" )
301
295
@pytest .mark .parametrize (
302
296
"engine,ext" ,
303
297
[
304
- pytest .param ("openpyxl" , ".xlsx" , marks = td .skip_if_no ("openpyxl" )),
305
- pytest .param ("openpyxl" , ".xlsm" , marks = td .skip_if_no ("openpyxl" )),
306
- pytest .param ("xlwt" , ".xls" , marks = td .skip_if_no ("xlwt" )),
307
- pytest .param ("xlsxwriter" , ".xlsx" , marks = td .skip_if_no ("xlsxwriter" )),
298
+ pytest .param ("openpyxl" , ".xlsx" , marks = [ td .skip_if_no ("openpyxl" ), td . skip_if_no ( "xlrd" )] ),
299
+ pytest .param ("openpyxl" , ".xlsm" , marks = [ td .skip_if_no ("openpyxl" ), td . skip_if_no ( "xlrd" )] ),
300
+ pytest .param ("xlwt" , ".xls" , marks = [ td .skip_if_no ("xlwt" ), td . skip_if_no ( "xlrd" )] ),
301
+ pytest .param ("xlsxwriter" , ".xlsx" , marks = [ td .skip_if_no ("xlsxwriter" ), td . skip_if_no ( "xlrd" )] ),
308
302
pytest .param ("odf" , ".ods" , marks = td .skip_if_no ("odf" )),
309
303
],
310
304
)
@@ -329,8 +323,6 @@ def test_excel_sheet_size(self, path):
329
323
col_df .to_excel (path )
330
324
331
325
def test_excel_sheet_by_name_raise (self , path , engine ):
332
- import xlrd
333
-
334
326
gt = DataFrame (np .random .randn (10 , 2 ))
335
327
gt .to_excel (path )
336
328
@@ -344,6 +336,7 @@ def test_excel_sheet_by_name_raise(self, path, engine):
344
336
with pytest .raises (ValueError , match = msg ):
345
337
pd .read_excel (xl , "0" )
346
338
else :
339
+ import xlrd
347
340
msg = "No sheet named <'0'>"
348
341
with pytest .raises (xlrd .XLRDError , match = msg ):
349
342
pd .read_excel (xl , sheet_name = "0" )
@@ -1200,9 +1193,7 @@ def test_bytes_io(self, engine):
1200
1193
writer .save ()
1201
1194
1202
1195
bio .seek (0 )
1203
- if engine != "odf" :
1204
- engine = None
1205
- reread_df = pd .read_excel (bio , engine = engine , index_col = 0 )
1196
+ reread_df = pd .read_excel (bio , index_col = 0 )
1206
1197
tm .assert_frame_equal (df , reread_df )
1207
1198
1208
1199
def test_write_lists_dict (self , path ):
@@ -1254,19 +1245,15 @@ def test_path_path_lib(self, engine, ext):
1254
1245
df = tm .makeDataFrame ()
1255
1246
writer = partial (df .to_excel , engine = engine )
1256
1247
1257
- if engine != "odf" :
1258
- engine = None
1259
- reader = partial (pd .read_excel , engine = engine , index_col = 0 )
1248
+ reader = partial (pd .read_excel , index_col = 0 )
1260
1249
result = tm .round_trip_pathlib (writer , reader , path = f"foo{ ext } " )
1261
1250
tm .assert_frame_equal (result , df )
1262
1251
1263
1252
def test_path_local_path (self , engine , ext ):
1264
1253
df = tm .makeDataFrame ()
1265
1254
writer = partial (df .to_excel , engine = engine )
1266
1255
1267
- if engine != "odf" :
1268
- engine = None
1269
- reader = partial (pd .read_excel , engine = engine , index_col = 0 )
1256
+ reader = partial (pd .read_excel , index_col = 0 )
1270
1257
result = tm .round_trip_localpath (writer , reader , path = f"foo{ ext } " )
1271
1258
tm .assert_frame_equal (result , df )
1272
1259
0 commit comments