Skip to content

Commit 4f46814

Browse files
committed
Revert "ENH Factored out excel_value_to_python_value from ExcelFile::_parse_excel (GH4589)"
This reverts commit 9fcd30b. Conflicts: doc/source/release.rst pandas/io/tests/test_excel.py
1 parent 9e2eee7 commit 4f46814

File tree

4 files changed

+14
-47
lines changed

4 files changed

+14
-47
lines changed

doc/source/release.rst

-1
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,6 @@ pandas 0.13
126126
now returns a ``MultiIndex`` rather than an ``Index``. (:issue:`4039`)
127127

128128
- Infer and downcast dtype if ``downcast='infer'`` is passed to ``fillna/ffill/bfill`` (:issue:`4604`)
129-
- Factored out excel_value_to_python_value from ExcelFile::_parse_excel (:issue:`4589`)
130129

131130
**Internal Refactoring**
132131

pandas/io/excel.py

+13-18
Original file line numberDiff line numberDiff line change
@@ -53,23 +53,6 @@ def read_excel(path_or_buf, sheetname, kind=None, **kwds):
5353
return ExcelFile(path_or_buf, kind=kind).parse(sheetname=sheetname,
5454
kind=kind, **kwds)
5555

56-
def excel_value_to_python_value(value, typ, datemode):
57-
from xlrd import (xldate_as_tuple, XL_CELL_DATE,
58-
XL_CELL_ERROR, XL_CELL_BOOLEAN)
59-
60-
if typ == XL_CELL_DATE:
61-
dt = xldate_as_tuple(value, datemode)
62-
# how to produce this first case?
63-
if dt[0] < datetime.MINYEAR: # pragma: no cover
64-
value = datetime.time(*dt[3:])
65-
else:
66-
value = datetime.datetime(*dt)
67-
elif typ == XL_CELL_ERROR:
68-
value = np.nan
69-
elif typ == XL_CELL_BOOLEAN:
70-
value = bool(value)
71-
72-
return value
7356

7457
class ExcelFile(object):
7558
"""
@@ -191,6 +174,8 @@ def _parse_excel(self, sheetname, header=0, skiprows=None, skip_footer=0,
191174
index_col=None, has_index_names=None, parse_cols=None,
192175
parse_dates=False, date_parser=None, na_values=None,
193176
thousands=None, chunksize=None, **kwds):
177+
from xlrd import (xldate_as_tuple, XL_CELL_DATE,
178+
XL_CELL_ERROR, XL_CELL_BOOLEAN)
194179

195180
datemode = self.book.datemode
196181
if isinstance(sheetname, compat.string_types):
@@ -208,7 +193,17 @@ def _parse_excel(self, sheetname, header=0, skiprows=None, skip_footer=0,
208193
should_parse[j] = self._should_parse(j, parse_cols)
209194

210195
if parse_cols is None or should_parse[j]:
211-
value = excel_value_to_python_value(value=value, typ=typ, datemode=datemode)
196+
if typ == XL_CELL_DATE:
197+
dt = xldate_as_tuple(value, datemode)
198+
# how to produce this first case?
199+
if dt[0] < datetime.MINYEAR: # pragma: no cover
200+
value = datetime.time(*dt[3:])
201+
else:
202+
value = datetime.datetime(*dt)
203+
elif typ == XL_CELL_ERROR:
204+
value = np.nan
205+
elif typ == XL_CELL_BOOLEAN:
206+
value = bool(value)
212207
row.append(value)
213208

214209
data.append(row)

pandas/io/tests/data/types.xls

-16 KB
Binary file not shown.

pandas/io/tests/test_excel.py

+1-28
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,7 @@
1818
import pandas.io.parsers as parsers
1919
from pandas.io.parsers import (read_csv, read_table, read_fwf,
2020
TextParser, TextFileReader)
21-
from pandas.io.excel import (ExcelFile, ExcelWriter, read_excel,
22-
excel_value_to_python_value)
21+
from pandas.io.excel import ExcelFile, ExcelWriter, read_excel
2322
from pandas.util.testing import (assert_almost_equal,
2423
assert_series_equal,
2524
network,
@@ -261,32 +260,6 @@ def test_excel_table(self):
261260
tm.assert_frame_equal(df4, df.ix[:-1])
262261
tm.assert_frame_equal(df4, df5)
263262

264-
def test_excel_value_to_python_value(self):
265-
_skip_if_no_xlrd()
266-
267-
pth = os.path.join(self.dirpath, 'types.xls')
268-
xls = ExcelFile(pth)
269-
book = xls.book
270-
sheet = book.sheet_by_index(0)
271-
272-
cell = sheet.cell(0, 0)
273-
self.assertEquals(excel_value_to_python_value(value=cell.value, typ=cell.ctype, datemode=book.datemode), 'date')
274-
275-
cell = sheet.cell(0, 1)
276-
self.assertEquals(excel_value_to_python_value(value=cell.value, typ=cell.ctype, datemode=book.datemode), datetime(year=2013, month=4, day=1))
277-
278-
cell = sheet.cell(1, 1)
279-
self.assertEquals(excel_value_to_python_value(value=cell.value, typ=cell.ctype, datemode=book.datemode), True)
280-
281-
cell = sheet.cell(2, 1)
282-
self.assertEquals(excel_value_to_python_value(value=cell.value, typ=cell.ctype, datemode=book.datemode), 1)
283-
284-
cell = sheet.cell(3, 1)
285-
self.assertEquals(excel_value_to_python_value(value=cell.value, typ=cell.ctype, datemode=book.datemode), 1.1)
286-
287-
cell = sheet.cell(4, 1)
288-
self.assertIs(excel_value_to_python_value(value=cell.value, typ=cell.ctype, datemode=book.datemode), np.nan) #We need to use is here because value is NaN
289-
290263
def test_excel_read_buffer(self):
291264
_skip_if_no_xlrd()
292265
_skip_if_no_openpyxl()

0 commit comments

Comments
 (0)