From 8625ccd0d7078b6374624701d4e563e3ed2aaf8d Mon Sep 17 00:00:00 2001 From: Chris Date: Sat, 30 Jan 2016 09:45:33 -0600 Subject: [PATCH] BUG: read_excel with squeeze=True --- doc/source/whatsnew/v0.18.0.txt | 2 +- pandas/io/excel.py | 17 +++++++++++------ pandas/io/tests/data/test_squeeze.xls | Bin 0 -> 26112 bytes pandas/io/tests/data/test_squeeze.xlsm | Bin 0 -> 8990 bytes pandas/io/tests/data/test_squeeze.xlsx | Bin 0 -> 8972 bytes pandas/io/tests/test_excel.py | 18 ++++++++++++++++++ 6 files changed, 30 insertions(+), 7 deletions(-) create mode 100644 pandas/io/tests/data/test_squeeze.xls create mode 100644 pandas/io/tests/data/test_squeeze.xlsm create mode 100644 pandas/io/tests/data/test_squeeze.xlsx diff --git a/doc/source/whatsnew/v0.18.0.txt b/doc/source/whatsnew/v0.18.0.txt index 58b60fb08920a..62fa6c80e690f 100644 --- a/doc/source/whatsnew/v0.18.0.txt +++ b/doc/source/whatsnew/v0.18.0.txt @@ -565,7 +565,7 @@ Bug Fixes - Bug in ``.plot`` potentially modifying the ``colors`` input when the number of columns didn't match the number of series provided (:issue:`12039`). - +- Bug in ``read_excel`` failing to read data with one column when ``squeeze=True`` (:issue:`12157`) - Bug in ``.groupby`` where a ``KeyError`` was not raised for a wrong column if there was only one row in the dataframe (:issue:`11741`) - Bug in ``.read_csv`` with dtype specified on empty data producing an error (:issue:`12048`) - Bug in building *pandas* with debugging symbols (:issue:`12123`) diff --git a/pandas/io/excel.py b/pandas/io/excel.py index 0642079cc5b34..2972e21f5f120 100644 --- a/pandas/io/excel.py +++ b/pandas/io/excel.py @@ -76,7 +76,7 @@ def read_excel(io, sheetname=0, header=0, skiprows=None, skip_footer=0, index_col=None, names=None, parse_cols=None, parse_dates=False, date_parser=None, na_values=None, thousands=None, convert_float=True, has_index_names=None, converters=None, - engine=None, **kwds): + engine=None, squeeze=False, **kwds): """ Read an Excel table into a pandas DataFrame @@ -133,6 +133,8 @@ def read_excel(io, sheetname=0, header=0, skiprows=None, skip_footer=0, * If list of ints then indicates list of column numbers to be parsed * If string then indicates comma separated list of column names and column ranges (e.g. "A:E" or "A,C,E:F") + squeeze : boolean, default False + If the parsed data only contains one column then return a Series na_values : list-like, default None List of additional strings to recognize as NA/NaN thousands : str, default None @@ -171,7 +173,7 @@ def read_excel(io, sheetname=0, header=0, skiprows=None, skip_footer=0, index_col=index_col, parse_cols=parse_cols, parse_dates=parse_dates, date_parser=date_parser, na_values=na_values, thousands=thousands, convert_float=convert_float, has_index_names=has_index_names, - skip_footer=skip_footer, converters=converters, **kwds) + skip_footer=skip_footer, converters=converters, squeeze=squeeze, **kwds) class ExcelFile(object): @@ -227,7 +229,7 @@ def parse(self, sheetname=0, header=0, skiprows=None, skip_footer=0, index_col=None, parse_cols=None, parse_dates=False, date_parser=None, na_values=None, thousands=None, convert_float=True, has_index_names=None, - converters=None, **kwds): + converters=None, squeeze=False, **kwds): """ Parse specified sheet(s) into a DataFrame @@ -246,6 +248,7 @@ def parse(self, sheetname=0, header=0, skiprows=None, skip_footer=0, skip_footer=skip_footer, convert_float=convert_float, converters=converters, + squeeze=squeeze, **kwds) def _should_parse(self, i, parse_cols): @@ -285,7 +288,7 @@ def _parse_excel(self, sheetname=0, header=0, skiprows=None, skip_footer=0, index_col=None, has_index_names=None, parse_cols=None, parse_dates=False, date_parser=None, na_values=None, thousands=None, convert_float=True, - verbose=False, **kwds): + verbose=False, squeeze=False, **kwds): skipfooter = kwds.pop('skipfooter', None) if skipfooter is not None: @@ -452,11 +455,13 @@ def _parse_cell(cell_contents, cell_typ): date_parser=date_parser, skiprows=skiprows, skip_footer=skip_footer, + squeeze=squeeze, **kwds) output[asheetname] = parser.read() - output[asheetname].columns = output[ - asheetname].columns.set_names(header_names) + if not squeeze or isinstance(output[asheetname], DataFrame): + output[asheetname].columns = output[ + asheetname].columns.set_names(header_names) if ret_dict: return output diff --git a/pandas/io/tests/data/test_squeeze.xls b/pandas/io/tests/data/test_squeeze.xls new file mode 100644 index 0000000000000000000000000000000000000000..7261f4df13f087f24a4e01db7942d4ba3b370248 GIT binary patch literal 26112 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 literal 0 HcmV?d00001 diff --git a/pandas/io/tests/data/test_squeeze.xlsm b/pandas/io/tests/data/test_squeeze.xlsm new file mode 100644 index 0000000000000000000000000000000000000000..d7fabe802ff52c14fb92ea43075e2833187b519c GIT binary patch literal 8990 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 literal 0 HcmV?d00001 diff --git a/pandas/io/tests/data/test_squeeze.xlsx b/pandas/io/tests/data/test_squeeze.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..89fc590cebcc76ed594f1bd64585a0c880254c5c GIT binary patch literal 8972 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 literal 0 HcmV?d00001 diff --git a/pandas/io/tests/test_excel.py b/pandas/io/tests/test_excel.py index 082a26df681a4..a6a189e4f4785 100644 --- a/pandas/io/tests/test_excel.py +++ b/pandas/io/tests/test_excel.py @@ -741,6 +741,24 @@ def test_read_excel_skiprows_list(self): 'skiprows_list', skiprows=np.array([0, 2])) tm.assert_frame_equal(actual, expected) + def test_read_excel_squeeze(self): + # GH 12157 + f = os.path.join(self.dirpath, 'test_squeeze' + self.ext) + + actual = pd.read_excel(f, 'two_columns', index_col=0, squeeze=True) + expected = pd.Series([2, 3, 4], [4, 5, 6], name='b') + expected.index.name = 'a' + tm.assert_series_equal(actual, expected) + + actual = pd.read_excel(f, 'two_columns', squeeze=True) + expected = pd.DataFrame({'a': [4, 5, 6], + 'b': [2, 3, 4]}) + tm.assert_frame_equal(actual, expected) + + actual = pd.read_excel(f, 'one_column', squeeze=True) + expected = pd.Series([1,2,3], name='a') + tm.assert_series_equal(actual, expected) + class XlsReaderTests(XlrdTests, tm.TestCase): ext = '.xls'