Skip to content

Commit 1204b31

Browse files
committed
BUG GH11733
1 parent 32df1e6 commit 1204b31

File tree

2 files changed

+53
-9
lines changed

2 files changed

+53
-9
lines changed

pandas/io/excel.py

+14-5
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ def get_writer(engine_name):
189189

190190
@Appender(_read_excel_doc)
191191
def read_excel(io, sheetname=0, header=0, skiprows=None, skip_footer=0,
192-
index_col=None, names=None, parse_cols=None, parse_dates=False,
192+
index_col='infer', names=None, parse_cols=None, parse_dates=False,
193193
date_parser=None, na_values=None, thousands=None,
194194
convert_float=True, has_index_names=None, converters=None,
195195
dtype=None, true_values=None, false_values=None, engine=None,
@@ -322,7 +322,7 @@ def _excel2num(x):
322322
return i in parse_cols
323323

324324
def _parse_excel(self, sheetname=0, header=0, skiprows=None, names=None,
325-
skip_footer=0, index_col=None, has_index_names=None,
325+
skip_footer=0, index_col='infer', has_index_names=None,
326326
parse_cols=None, parse_dates=False, date_parser=None,
327327
na_values=None, thousands=None, convert_float=True,
328328
true_values=None, false_values=None, verbose=False,
@@ -351,6 +351,12 @@ def _parse_excel(self, sheetname=0, header=0, skiprows=None, names=None,
351351
raise NotImplementedError("date_parser keyword of read_excel "
352352
"is not implemented")
353353

354+
# At the API, index_col == None means just that,
355+
# but lower down it can also mean infer.
356+
have_index_col = (index_col is not None)
357+
if index_col == 'infer':
358+
index_col = None
359+
354360
import xlrd
355361
from xlrd import (xldate, XL_CELL_DATE,
356362
XL_CELL_ERROR, XL_CELL_BOOLEAN,
@@ -472,10 +478,13 @@ def _parse_cell(cell_contents, cell_typ):
472478

473479
data[row], control_row = _fill_mi_header(
474480
data[row], control_row)
475-
header_name, data[row] = _pop_header_name(
476-
data[row], index_col)
481+
if have_index_col:
482+
header_name, data[row] = _pop_header_name(
483+
data[row], index_col)
484+
else:
485+
header_name = ''
477486
header_names.append(header_name)
478-
else:
487+
elif have_index_col:
479488
data[header] = _trim_excel_header(data[header])
480489

481490
if is_list_like(index_col):

pandas/tests/io/test_excel.py

+39-4
Original file line numberDiff line numberDiff line change
@@ -777,6 +777,41 @@ def test_read_excel_multiindex(self):
777777
header=[0, 1], skiprows=2)
778778
tm.assert_frame_equal(actual, expected)
779779

780+
def test_read_excel_multiindex_colindex_none(self):
781+
# GH 11733
782+
mi = MultiIndex(levels=[['Unnamed: 0_level_0', u'bar', u'foo'],
783+
['Unnamed: 0_level_1', u'a', u'b']],
784+
labels=[[0, 2, 2, 1, 1], [0, 1, 2, 1, 2]],
785+
names=[u'', u''])
786+
mi_file = os.path.join(self.dirpath, 'testmultiindex' + self.ext)
787+
788+
expected = DataFrame([[0, 1, 2.5, pd.Timestamp('2015-01-01'), True],
789+
[1, 2, 3.5, pd.Timestamp('2015-01-02'), False],
790+
[2, 3, 4.5, pd.Timestamp('2015-01-03'), False],
791+
[3, 4, 5.5, pd.Timestamp('2015-01-04'), True]],
792+
columns=mi)
793+
794+
actual = read_excel(mi_file, 'mi_column', header=[0, 1], index_col=None)
795+
tm.assert_frame_equal(actual, expected)
796+
797+
mi = MultiIndex(levels=[[u'c1', u'bar', u'foo'],
798+
[u'c2', u'a', u'b']],
799+
labels=[[0, 2, 2, 1, 1], [0, 1, 2, 1, 2]],
800+
names=[u'', u''])
801+
expected.columns = mi
802+
actual = read_excel(mi_file, 'mi_column_name',
803+
header=[0, 1], index_col=None)
804+
tm.assert_frame_equal(actual, expected)
805+
806+
mi = MultiIndex(levels=[[u'c1', u'bar', u'foo'],
807+
[u'c2', 1, 2]],
808+
labels=[[0, 2, 2, 1, 1], [0, 1, 2, 1, 2]],
809+
names=[u'', u''])
810+
expected.columns = mi
811+
actual = read_excel(mi_file, 'name_with_int',
812+
index_col=None, header=[0, 1])
813+
tm.assert_frame_equal(actual, expected)
814+
780815
def test_read_excel_multiindex_empty_level(self):
781816
# GH 12453
782817
_skip_if_no_xlsxwriter()
@@ -1344,8 +1379,8 @@ def test_excel_date_datetime_format(self):
13441379
reader1 = ExcelFile(filename1)
13451380
reader2 = ExcelFile(filename2)
13461381

1347-
rs1 = read_excel(reader1, 'test1', index_col=None)
1348-
rs2 = read_excel(reader2, 'test1', index_col=None)
1382+
rs1 = read_excel(reader1, 'test1')
1383+
rs2 = read_excel(reader2, 'test1')
13491384

13501385
tm.assert_frame_equal(rs1, rs2)
13511386

@@ -1486,7 +1521,7 @@ def test_to_excel_float_format(self):
14861521
df.to_excel(filename, 'test1', float_format='%.2f')
14871522

14881523
reader = ExcelFile(filename)
1489-
rs = read_excel(reader, 'test1', index_col=None)
1524+
rs = read_excel(reader, 'test1')
14901525
xp = DataFrame([[0.12, 0.23, 0.57],
14911526
[12.32, 123123.20, 321321.20]],
14921527
index=['A', 'B'], columns=['X', 'Y', 'Z'])
@@ -1524,7 +1559,7 @@ def test_to_excel_unicode_filename(self):
15241559
df.to_excel(filename, 'test1', float_format='%.2f')
15251560

15261561
reader = ExcelFile(filename)
1527-
rs = read_excel(reader, 'test1', index_col=None)
1562+
rs = read_excel(reader, 'test1')
15281563
xp = DataFrame([[0.12, 0.23, 0.57],
15291564
[12.32, 123123.20, 321321.20]],
15301565
index=['A', 'B'], columns=['X', 'Y', 'Z'])

0 commit comments

Comments
 (0)