28
28
from pandas .util .testing import ensure_clean , makeCustomDataframe as mkdf
29
29
30
30
31
- def _skip_if_no_xlrd ():
32
- try :
33
- import xlrd
34
- ver = tuple (map (int , xlrd .__VERSION__ .split ("." )[:2 ]))
35
- if ver < (0 , 9 ):
36
- pytest .skip ('xlrd < 0.9, skipping' )
37
- except ImportError :
38
- pytest .skip ('xlrd not installed, skipping' )
39
-
40
-
41
31
def _skip_if_no_xlwt ():
42
32
try :
43
33
import xlwt # NOQA
@@ -59,12 +49,6 @@ def _skip_if_no_xlsxwriter():
59
49
pytest .skip ('xlsxwriter not installed, skipping' )
60
50
61
51
62
- def _skip_if_no_excelsuite ():
63
- _skip_if_no_xlrd ()
64
- _skip_if_no_xlwt ()
65
- _skip_if_no_openpyxl ()
66
-
67
-
68
52
_seriesd = tm .getSeriesData ()
69
53
_tsd = tm .getTimeSeriesData ()
70
54
_frame = DataFrame (_seriesd )[:10 ]
@@ -74,6 +58,7 @@ def _skip_if_no_excelsuite():
74
58
_mixed_frame ['foo' ] = 'bar'
75
59
76
60
61
+ @td .skip_if_no ('xlrd' , '0.9' )
77
62
class SharedItems (object ):
78
63
79
64
def setup_method (self , method ):
@@ -554,7 +539,6 @@ def test_sheet_name_both_raises(self, ext):
554
539
self .get_exceldf ('test1' , ext , sheetname = 'Sheet1' , sheet_name = 'Sheet1' )
555
540
556
541
557
- @td .skip_if_no ('xlrd' , '0.9' )
558
542
@pytest .mark .parametrize ("ext" , ['.xls' , '.xlsx' , '.xlsm' ])
559
543
class TestXlrdReader (ReadingTestsBase ):
560
544
"""
@@ -1069,7 +1053,6 @@ def teardown_method(self, method):
1069
1053
set_option (self .option_name , self .prev_engine )
1070
1054
1071
1055
def test_excel_sheet_by_name_raise (self ):
1072
- _skip_if_no_xlrd ()
1073
1056
import xlrd
1074
1057
1075
1058
with ensure_clean (self .ext ) as pth :
@@ -1083,8 +1066,6 @@ def test_excel_sheet_by_name_raise(self):
1083
1066
read_excel (xl , '0' )
1084
1067
1085
1068
def test_excelwriter_contextmanager (self ):
1086
- _skip_if_no_xlrd ()
1087
-
1088
1069
with ensure_clean (self .ext ) as pth :
1089
1070
with ExcelWriter (pth ) as writer :
1090
1071
self .frame .to_excel (writer , 'Data1' )
@@ -1097,8 +1078,6 @@ def test_excelwriter_contextmanager(self):
1097
1078
tm .assert_frame_equal (found_df2 , self .frame2 )
1098
1079
1099
1080
def test_roundtrip (self ):
1100
- _skip_if_no_xlrd ()
1101
-
1102
1081
with ensure_clean (self .ext ) as path :
1103
1082
self .frame ['A' ][:5 ] = nan
1104
1083
@@ -1147,17 +1126,13 @@ def test_roundtrip(self):
1147
1126
tm .assert_frame_equal (s .to_frame (), recons )
1148
1127
1149
1128
def test_mixed (self ):
1150
- _skip_if_no_xlrd ()
1151
-
1152
1129
with ensure_clean (self .ext ) as path :
1153
1130
self .mixed_frame .to_excel (path , 'test1' )
1154
1131
reader = ExcelFile (path )
1155
1132
recons = read_excel (reader , 'test1' , index_col = 0 )
1156
1133
tm .assert_frame_equal (self .mixed_frame , recons )
1157
1134
1158
1135
def test_tsframe (self ):
1159
- _skip_if_no_xlrd ()
1160
-
1161
1136
df = tm .makeTimeDataFrame ()[:5 ]
1162
1137
1163
1138
with ensure_clean (self .ext ) as path :
@@ -1167,7 +1142,6 @@ def test_tsframe(self):
1167
1142
tm .assert_frame_equal (df , recons )
1168
1143
1169
1144
def test_basics_with_nan (self ):
1170
- _skip_if_no_xlrd ()
1171
1145
with ensure_clean (self .ext ) as path :
1172
1146
self .frame ['A' ][:5 ] = nan
1173
1147
self .frame .to_excel (path , 'test1' )
@@ -1176,8 +1150,6 @@ def test_basics_with_nan(self):
1176
1150
self .frame .to_excel (path , 'test1' , index = False )
1177
1151
1178
1152
def test_int_types (self ):
1179
- _skip_if_no_xlrd ()
1180
-
1181
1153
for np_type in (np .int8 , np .int16 , np .int32 , np .int64 ):
1182
1154
1183
1155
with ensure_clean (self .ext ) as path :
@@ -1201,8 +1173,6 @@ def test_int_types(self):
1201
1173
check_column_type = False )
1202
1174
1203
1175
def test_float_types (self ):
1204
- _skip_if_no_xlrd ()
1205
-
1206
1176
for np_type in (np .float16 , np .float32 , np .float64 ):
1207
1177
with ensure_clean (self .ext ) as path :
1208
1178
# Test np.float values read come back as float.
@@ -1213,8 +1183,6 @@ def test_float_types(self):
1213
1183
tm .assert_frame_equal (frame , recons , check_dtype = False )
1214
1184
1215
1185
def test_bool_types (self ):
1216
- _skip_if_no_xlrd ()
1217
-
1218
1186
for np_type in (np .bool8 , np .bool_ ):
1219
1187
with ensure_clean (self .ext ) as path :
1220
1188
# Test np.bool values read come back as float.
@@ -1225,8 +1193,6 @@ def test_bool_types(self):
1225
1193
tm .assert_frame_equal (frame , recons )
1226
1194
1227
1195
def test_inf_roundtrip (self ):
1228
- _skip_if_no_xlrd ()
1229
-
1230
1196
frame = DataFrame ([(1 , np .inf ), (2 , 3 ), (5 , - np .inf )])
1231
1197
with ensure_clean (self .ext ) as path :
1232
1198
frame .to_excel (path , 'test1' )
@@ -1235,8 +1201,6 @@ def test_inf_roundtrip(self):
1235
1201
tm .assert_frame_equal (frame , recons )
1236
1202
1237
1203
def test_sheets (self ):
1238
- _skip_if_no_xlrd ()
1239
-
1240
1204
with ensure_clean (self .ext ) as path :
1241
1205
self .frame ['A' ][:5 ] = nan
1242
1206
@@ -1260,8 +1224,6 @@ def test_sheets(self):
1260
1224
assert 'test2' == reader .sheet_names [1 ]
1261
1225
1262
1226
def test_colaliases (self ):
1263
- _skip_if_no_xlrd ()
1264
-
1265
1227
with ensure_clean (self .ext ) as path :
1266
1228
self .frame ['A' ][:5 ] = nan
1267
1229
@@ -1280,8 +1242,6 @@ def test_colaliases(self):
1280
1242
tm .assert_frame_equal (xp , rs )
1281
1243
1282
1244
def test_roundtrip_indexlabels (self ):
1283
- _skip_if_no_xlrd ()
1284
-
1285
1245
with ensure_clean (self .ext ) as path :
1286
1246
1287
1247
self .frame ['A' ][:5 ] = nan
@@ -1342,8 +1302,6 @@ def test_roundtrip_indexlabels(self):
1342
1302
tm .assert_frame_equal (df , recons , check_less_precise = True )
1343
1303
1344
1304
def test_excel_roundtrip_indexname (self ):
1345
- _skip_if_no_xlrd ()
1346
-
1347
1305
df = DataFrame (np .random .randn (10 , 4 ))
1348
1306
df .index .name = 'foo'
1349
1307
@@ -1358,8 +1316,6 @@ def test_excel_roundtrip_indexname(self):
1358
1316
assert result .index .name == 'foo'
1359
1317
1360
1318
def test_excel_roundtrip_datetime (self ):
1361
- _skip_if_no_xlrd ()
1362
-
1363
1319
# datetime.date, not sure what to test here exactly
1364
1320
tsf = self .tsframe .copy ()
1365
1321
with ensure_clean (self .ext ) as path :
@@ -1372,7 +1328,6 @@ def test_excel_roundtrip_datetime(self):
1372
1328
1373
1329
# GH4133 - excel output format strings
1374
1330
def test_excel_date_datetime_format (self ):
1375
- _skip_if_no_xlrd ()
1376
1331
df = DataFrame ([[date (2014 , 1 , 31 ),
1377
1332
date (1999 , 9 , 24 )],
1378
1333
[datetime (1998 , 5 , 26 , 23 , 33 , 4 ),
@@ -1411,8 +1366,6 @@ def test_excel_date_datetime_format(self):
1411
1366
1412
1367
def test_to_excel_interval_no_labels (self ):
1413
1368
# GH19242 - test writing Interval without labels
1414
- _skip_if_no_xlrd ()
1415
-
1416
1369
with ensure_clean (self .ext ) as path :
1417
1370
frame = DataFrame (np .random .randint (- 10 , 10 , size = (20 , 1 )),
1418
1371
dtype = np .int64 )
@@ -1426,8 +1379,6 @@ def test_to_excel_interval_no_labels(self):
1426
1379
1427
1380
def test_to_excel_interval_labels (self ):
1428
1381
# GH19242 - test writing Interval with labels
1429
- _skip_if_no_xlrd ()
1430
-
1431
1382
with ensure_clean (self .ext ) as path :
1432
1383
frame = DataFrame (np .random .randint (- 10 , 10 , size = (20 , 1 )),
1433
1384
dtype = np .int64 )
@@ -1443,8 +1394,6 @@ def test_to_excel_interval_labels(self):
1443
1394
1444
1395
def test_to_excel_timedelta (self ):
1445
1396
# GH 19242, GH9155 - test writing timedelta to xls
1446
- _skip_if_no_xlrd ()
1447
-
1448
1397
with ensure_clean ('.xls' ) as path :
1449
1398
frame = DataFrame (np .random .randint (- 10 , 10 , size = (20 , 1 )),
1450
1399
columns = ['A' ],
@@ -1460,8 +1409,6 @@ def test_to_excel_timedelta(self):
1460
1409
tm .assert_frame_equal (expected , recons )
1461
1410
1462
1411
def test_to_excel_periodindex (self ):
1463
- _skip_if_no_xlrd ()
1464
-
1465
1412
frame = self .tsframe
1466
1413
xp = frame .resample ('M' , kind = 'period' ).mean ()
1467
1414
@@ -1473,8 +1420,6 @@ def test_to_excel_periodindex(self):
1473
1420
tm .assert_frame_equal (xp , rs .to_period ('M' ))
1474
1421
1475
1422
def test_to_excel_multiindex (self ):
1476
- _skip_if_no_xlrd ()
1477
-
1478
1423
frame = self .frame
1479
1424
arrays = np .arange (len (frame .index ) * 2 ).reshape (2 , - 1 )
1480
1425
new_index = MultiIndex .from_arrays (arrays ,
@@ -1493,8 +1438,6 @@ def test_to_excel_multiindex(self):
1493
1438
1494
1439
# GH13511
1495
1440
def test_to_excel_multiindex_nan_label (self ):
1496
- _skip_if_no_xlrd ()
1497
-
1498
1441
frame = pd .DataFrame ({'A' : [None , 2 , 3 ],
1499
1442
'B' : [10 , 20 , 30 ],
1500
1443
'C' : np .random .sample (3 )})
@@ -1509,8 +1452,6 @@ def test_to_excel_multiindex_nan_label(self):
1509
1452
# sure they are handled correctly for either setting of
1510
1453
# merge_cells
1511
1454
def test_to_excel_multiindex_cols (self ):
1512
- _skip_if_no_xlrd ()
1513
-
1514
1455
frame = self .frame
1515
1456
arrays = np .arange (len (frame .index ) * 2 ).reshape (2 , - 1 )
1516
1457
new_index = MultiIndex .from_arrays (arrays ,
@@ -1537,8 +1478,6 @@ def test_to_excel_multiindex_cols(self):
1537
1478
tm .assert_frame_equal (frame , df )
1538
1479
1539
1480
def test_to_excel_multiindex_dates (self ):
1540
- _skip_if_no_xlrd ()
1541
-
1542
1481
# try multiindex with dates
1543
1482
tsframe = self .tsframe .copy ()
1544
1483
new_index = [tsframe .index , np .arange (len (tsframe .index ))]
@@ -1555,8 +1494,6 @@ def test_to_excel_multiindex_dates(self):
1555
1494
assert recons .index .names == ('time' , 'foo' )
1556
1495
1557
1496
def test_to_excel_multiindex_no_write_index (self ):
1558
- _skip_if_no_xlrd ()
1559
-
1560
1497
# Test writing and re-reading a MI witout the index. GH 5616.
1561
1498
1562
1499
# Initial non-MI frame.
@@ -1580,8 +1517,6 @@ def test_to_excel_multiindex_no_write_index(self):
1580
1517
tm .assert_frame_equal (frame1 , frame3 )
1581
1518
1582
1519
def test_to_excel_float_format (self ):
1583
- _skip_if_no_xlrd ()
1584
-
1585
1520
df = DataFrame ([[0.123456 , 0.234567 , 0.567567 ],
1586
1521
[12.32112 , 123123.2 , 321321.2 ]],
1587
1522
index = ['A' , 'B' ], columns = ['X' , 'Y' , 'Z' ])
@@ -1597,8 +1532,6 @@ def test_to_excel_float_format(self):
1597
1532
tm .assert_frame_equal (rs , xp )
1598
1533
1599
1534
def test_to_excel_output_encoding (self ):
1600
- _skip_if_no_xlrd ()
1601
-
1602
1535
# avoid mixed inferred_type
1603
1536
df = DataFrame ([[u'\u0192 ' , u'\u0193 ' , u'\u0194 ' ],
1604
1537
[u'\u0195 ' , u'\u0196 ' , u'\u0197 ' ]],
@@ -1612,7 +1545,6 @@ def test_to_excel_output_encoding(self):
1612
1545
tm .assert_frame_equal (result , df )
1613
1546
1614
1547
def test_to_excel_unicode_filename (self ):
1615
- _skip_if_no_xlrd ()
1616
1548
with ensure_clean (u ('\u0192 u.' ) + self .ext ) as filename :
1617
1549
try :
1618
1550
f = open (filename , 'wb' )
@@ -1735,8 +1667,6 @@ def test_to_excel_unicode_filename(self):
1735
1667
# os.remove(filename)
1736
1668
1737
1669
def test_excel_010_hemstring (self ):
1738
- _skip_if_no_xlrd ()
1739
-
1740
1670
if self .merge_cells :
1741
1671
pytest .skip ('Skip tests for merged MI format.' )
1742
1672
@@ -1790,8 +1720,6 @@ def roundtrip(df, header=True, parser_hdr=0, index=True):
1790
1720
def test_excel_010_hemstring_raises_NotImplementedError (self ):
1791
1721
# This test was failing only for j>1 and header=False,
1792
1722
# So I reproduced a simple test.
1793
- _skip_if_no_xlrd ()
1794
-
1795
1723
if self .merge_cells :
1796
1724
pytest .skip ('Skip tests for merged MI format.' )
1797
1725
@@ -1818,8 +1746,6 @@ def roundtrip2(df, header=True, parser_hdr=0, index=True):
1818
1746
1819
1747
def test_duplicated_columns (self ):
1820
1748
# Test for issue #5235
1821
- _skip_if_no_xlrd ()
1822
-
1823
1749
with ensure_clean (self .ext ) as path :
1824
1750
write_frame = DataFrame ([[1 , 2 , 3 ], [1 , 2 , 3 ], [1 , 2 , 3 ]])
1825
1751
colnames = ['A' , 'B' , 'B' ]
@@ -1847,8 +1773,6 @@ def test_duplicated_columns(self):
1847
1773
1848
1774
def test_swapped_columns (self ):
1849
1775
# Test for issue #5427.
1850
- _skip_if_no_xlrd ()
1851
-
1852
1776
with ensure_clean (self .ext ) as path :
1853
1777
write_frame = DataFrame ({'A' : [1 , 1 , 1 ],
1854
1778
'B' : [2 , 2 , 2 ]})
@@ -1861,8 +1785,6 @@ def test_swapped_columns(self):
1861
1785
1862
1786
def test_invalid_columns (self ):
1863
1787
# 10982
1864
- _skip_if_no_xlrd ()
1865
-
1866
1788
with ensure_clean (self .ext ) as path :
1867
1789
write_frame = DataFrame ({'A' : [1 , 1 , 1 ],
1868
1790
'B' : [2 , 2 , 2 ]})
@@ -1942,8 +1864,6 @@ def test_comment_emptyline(self):
1942
1864
def test_datetimes (self ):
1943
1865
1944
1866
# Test writing and reading datetimes. For issue #9139. (xref #9185)
1945
- _skip_if_no_xlrd ()
1946
-
1947
1867
datetimes = [datetime (2013 , 1 , 13 , 1 , 2 , 3 ),
1948
1868
datetime (2013 , 1 , 13 , 2 , 45 , 56 ),
1949
1869
datetime (2013 , 1 , 13 , 4 , 29 , 49 ),
@@ -1965,8 +1885,6 @@ def test_datetimes(self):
1965
1885
1966
1886
# GH7074
1967
1887
def test_bytes_io (self ):
1968
- _skip_if_no_xlrd ()
1969
-
1970
1888
bio = BytesIO ()
1971
1889
df = DataFrame (np .random .randn (10 , 2 ))
1972
1890
# pass engine explicitly as there is no file path to infer from
@@ -1979,8 +1897,6 @@ def test_bytes_io(self):
1979
1897
1980
1898
# GH8188
1981
1899
def test_write_lists_dict (self ):
1982
- _skip_if_no_xlrd ()
1983
-
1984
1900
df = DataFrame ({'mixed' : ['a' , ['b' , 'c' ], {'d' : 'e' , 'f' : 2 }],
1985
1901
'numeric' : [1 , 2 , 3.0 ],
1986
1902
'str' : ['apple' , 'banana' , 'cherry' ]})
0 commit comments