Skip to content

Commit e3ec250

Browse files
grahamjeffriesjorisvandenbossche
authored andcommitted
remove read_excel kwd NotImplemented error, update documentation #11544
1 parent 5033a4a commit e3ec250

File tree

3 files changed

+44
-45
lines changed

3 files changed

+44
-45
lines changed

doc/source/io.rst

+12
Original file line numberDiff line numberDiff line change
@@ -2503,6 +2503,18 @@ indices to be parsed.
25032503
25042504
read_excel('path_to_file.xls', 'Sheet1', parse_cols=[0, 2, 3])
25052505
2506+
2507+
Parsing Dates
2508+
+++++++++++++
2509+
2510+
The `parse_dates` keyword for `read_excel` is used to specify whether to parse strings
2511+
to a datetime.
2512+
2513+
.. code-block:: python
2514+
2515+
read_excel('path_to_file.xls', 'Sheet1', parse_dates=['strings'])
2516+
2517+
25062518
Cell Converters
25072519
+++++++++++++++
25082520

pandas/io/excel.py

+3-6
Original file line numberDiff line numberDiff line change
@@ -335,13 +335,10 @@ def _parse_excel(self, sheetname=0, header=0, skiprows=None, names=None,
335335
if 'chunksize' in kwds:
336336
raise NotImplementedError("chunksize keyword of read_excel "
337337
"is not implemented")
338-
if parse_dates:
339-
raise NotImplementedError("parse_dates keyword of read_excel "
340-
"is not implemented")
341338

342-
if date_parser is not None:
343-
raise NotImplementedError("date_parser keyword of read_excel "
344-
"is not implemented")
339+
if parse_dates and not index_col:
340+
warn("The parse_dates keyword of read_excel was provided without "
341+
"an index_col keyword value.")
345342

346343
import xlrd
347344
from xlrd import (xldate, XL_CELL_DATE,

pandas/io/tests/test_excel.py

+29-39
Original file line numberDiff line numberDiff line change
@@ -167,9 +167,10 @@ def test_parse_cols_int(self):
167167

168168
dfref = self.get_csv_refdf('test1')
169169
dfref = dfref.reindex(columns=['A', 'B', 'C'])
170-
df1 = self.get_exceldf('test1', 'Sheet1', index_col=0, parse_cols=3)
171-
df2 = self.get_exceldf('test1', 'Sheet2', skiprows=[1], index_col=0,
170+
df1 = self.get_exceldf('test1', 'Sheet1', index_col=0, parse_dates=True,
172171
parse_cols=3)
172+
df2 = self.get_exceldf('test1', 'Sheet2', skiprows=[1], index_col=0,
173+
parse_dates=True, parse_cols=3)
173174
# TODO add index to xls file)
174175
tm.assert_frame_equal(df1, dfref, check_names=False)
175176
tm.assert_frame_equal(df2, dfref, check_names=False)
@@ -178,9 +179,10 @@ def test_parse_cols_list(self):
178179

179180
dfref = self.get_csv_refdf('test1')
180181
dfref = dfref.reindex(columns=['B', 'C'])
181-
df1 = self.get_exceldf('test1', 'Sheet1', index_col=0,
182+
df1 = self.get_exceldf('test1', 'Sheet1', index_col=0, parse_dates=True,
182183
parse_cols=[0, 2, 3])
183184
df2 = self.get_exceldf('test1', 'Sheet2', skiprows=[1], index_col=0,
185+
parse_dates=True,
184186
parse_cols=[0, 2, 3])
185187
# TODO add index to xls file)
186188
tm.assert_frame_equal(df1, dfref, check_names=False)
@@ -191,28 +193,28 @@ def test_parse_cols_str(self):
191193
dfref = self.get_csv_refdf('test1')
192194

193195
df1 = dfref.reindex(columns=['A', 'B', 'C'])
194-
df2 = self.get_exceldf('test1', 'Sheet1', index_col=0,
196+
df2 = self.get_exceldf('test1', 'Sheet1', index_col=0, parse_dates=True,
195197
parse_cols='A:D')
196198
df3 = self.get_exceldf('test1', 'Sheet2', skiprows=[1], index_col=0,
197-
parse_cols='A:D')
199+
parse_dates=True, parse_cols='A:D')
198200
# TODO add index to xls, read xls ignores index name ?
199201
tm.assert_frame_equal(df2, df1, check_names=False)
200202
tm.assert_frame_equal(df3, df1, check_names=False)
201203

202204
df1 = dfref.reindex(columns=['B', 'C'])
203-
df2 = self.get_exceldf('test1', 'Sheet1', index_col=0,
205+
df2 = self.get_exceldf('test1', 'Sheet1', index_col=0, parse_dates=True,
204206
parse_cols='A,C,D')
205207
df3 = self.get_exceldf('test1', 'Sheet2', skiprows=[1], index_col=0,
206-
parse_cols='A,C,D')
208+
parse_dates=True, parse_cols='A,C,D')
207209
# TODO add index to xls file
208210
tm.assert_frame_equal(df2, df1, check_names=False)
209211
tm.assert_frame_equal(df3, df1, check_names=False)
210212

211213
df1 = dfref.reindex(columns=['B', 'C'])
212-
df2 = self.get_exceldf('test1', 'Sheet1', index_col=0,
214+
df2 = self.get_exceldf('test1', 'Sheet1', index_col=0, parse_dates=True,
213215
parse_cols='A,C:D')
214216
df3 = self.get_exceldf('test1', 'Sheet2', skiprows=[1], index_col=0,
215-
parse_cols='A,C:D')
217+
parse_dates=True, parse_cols='A,C:D')
216218
tm.assert_frame_equal(df2, df1, check_names=False)
217219
tm.assert_frame_equal(df3, df1, check_names=False)
218220

@@ -264,23 +266,23 @@ def test_excel_table_sheet_by_index(self):
264266
excel = self.get_excelfile('test1')
265267
dfref = self.get_csv_refdf('test1')
266268

267-
df1 = read_excel(excel, 0, index_col=0)
268-
df2 = read_excel(excel, 1, skiprows=[1], index_col=0)
269+
df1 = read_excel(excel, 0, index_col=0, parse_dates=True)
270+
df2 = read_excel(excel, 1, skiprows=[1], index_col=0, parse_dates=True)
269271
tm.assert_frame_equal(df1, dfref, check_names=False)
270272
tm.assert_frame_equal(df2, dfref, check_names=False)
271273

272-
df1 = excel.parse(0, index_col=0)
273-
df2 = excel.parse(1, skiprows=[1], index_col=0)
274+
df1 = excel.parse(0, index_col=0, parse_dates=True)
275+
df2 = excel.parse(1, skiprows=[1], index_col=0, parse_dates=True)
274276
tm.assert_frame_equal(df1, dfref, check_names=False)
275277
tm.assert_frame_equal(df2, dfref, check_names=False)
276278

277-
df3 = read_excel(excel, 0, index_col=0, skipfooter=1)
278-
df4 = read_excel(excel, 0, index_col=0, skip_footer=1)
279+
df3 = read_excel(excel, 0, index_col=0, parse_dates=True, skipfooter=1)
280+
df4 = read_excel(excel, 0, index_col=0, parse_dates=True, skip_footer=1)
279281
tm.assert_frame_equal(df3, df1.ix[:-1])
280282
tm.assert_frame_equal(df3, df4)
281283

282-
df3 = excel.parse(0, index_col=0, skipfooter=1)
283-
df4 = excel.parse(0, index_col=0, skip_footer=1)
284+
df3 = excel.parse(0, index_col=0, parse_dates=True, skipfooter=1)
285+
df4 = excel.parse(0, index_col=0, parse_dates=True, skip_footer=1)
284286
tm.assert_frame_equal(df3, df1.ix[:-1])
285287
tm.assert_frame_equal(df3, df4)
286288

@@ -292,15 +294,16 @@ def test_excel_table(self):
292294

293295
dfref = self.get_csv_refdf('test1')
294296

295-
df1 = self.get_exceldf('test1', 'Sheet1', index_col=0)
296-
df2 = self.get_exceldf('test1', 'Sheet2', skiprows=[1], index_col=0)
297+
df1 = self.get_exceldf('test1', 'Sheet1', index_col=0, parse_dates=True)
298+
df2 = self.get_exceldf('test1', 'Sheet2', skiprows=[1], index_col=0,
299+
parse_dates=True)
297300
# TODO add index to file
298301
tm.assert_frame_equal(df1, dfref, check_names=False)
299302
tm.assert_frame_equal(df2, dfref, check_names=False)
300303

301-
df3 = self.get_exceldf('test1', 'Sheet1', index_col=0,
304+
df3 = self.get_exceldf('test1', 'Sheet1', index_col=0, parse_dates=True,
302305
skipfooter=1)
303-
df4 = self.get_exceldf('test1', 'Sheet1', index_col=0,
306+
df4 = self.get_exceldf('test1', 'Sheet1', index_col=0, parse_dates=True,
304307
skip_footer=1)
305308
tm.assert_frame_equal(df3, df1.ix[:-1])
306309
tm.assert_frame_equal(df3, df4)
@@ -515,14 +518,14 @@ class XlrdTests(ReadingTestsBase):
515518
def test_excel_read_buffer(self):
516519

517520
pth = os.path.join(self.dirpath, 'test1' + self.ext)
518-
expected = read_excel(pth, 'Sheet1', index_col=0)
521+
expected = read_excel(pth, 'Sheet1', index_col=0, parse_dates=True)
519522
with open(pth, 'rb') as f:
520-
actual = read_excel(f, 'Sheet1', index_col=0)
523+
actual = read_excel(f, 'Sheet1', index_col=0, parse_dates=True)
521524
tm.assert_frame_equal(expected, actual)
522525

523526
with open(pth, 'rb') as f:
524527
xls = ExcelFile(f)
525-
actual = read_excel(xls, 'Sheet1', index_col=0)
528+
actual = read_excel(xls, 'Sheet1', index_col=0, parse_dates=True)
526529
tm.assert_frame_equal(expected, actual)
527530

528531
def test_read_xlrd_Book(self):
@@ -874,7 +877,7 @@ def test_excel_oldindex_format(self):
874877
tm.assert_frame_equal(actual, expected, check_names=False)
875878

876879
def test_read_excel_bool_header_arg(self):
877-
# GH 6114
880+
#GH 6114
878881
for arg in [True, False]:
879882
with tm.assertRaises(TypeError):
880883
pd.read_excel(os.path.join(self.dirpath, 'test1' + self.ext),
@@ -886,19 +889,6 @@ def test_read_excel_chunksize(self):
886889
pd.read_excel(os.path.join(self.dirpath, 'test1' + self.ext),
887890
chunksize=100)
888891

889-
def test_read_excel_parse_dates(self):
890-
# GH 11544
891-
with tm.assertRaises(NotImplementedError):
892-
pd.read_excel(os.path.join(self.dirpath, 'test1' + self.ext),
893-
parse_dates=True)
894-
895-
def test_read_excel_date_parser(self):
896-
# GH 11544
897-
with tm.assertRaises(NotImplementedError):
898-
dateparse = lambda x: pd.datetime.strptime(x, '%Y-%m-%d %H:%M:%S')
899-
pd.read_excel(os.path.join(self.dirpath, 'test1' + self.ext),
900-
date_parser=dateparse)
901-
902892
def test_read_excel_skiprows_list(self):
903893
# GH 4903
904894
actual = pd.read_excel(os.path.join(self.dirpath,
@@ -1320,7 +1310,7 @@ def test_to_excel_periodindex(self):
13201310
xp.to_excel(path, 'sht1')
13211311

13221312
reader = ExcelFile(path)
1323-
rs = read_excel(reader, 'sht1', index_col=0)
1313+
rs = read_excel(reader, 'sht1', index_col=0, parse_dates=True)
13241314
tm.assert_frame_equal(xp, rs.to_period('M'))
13251315

13261316
def test_to_excel_multiindex(self):

0 commit comments

Comments
 (0)