Skip to content

Commit 362e898

Browse files
committed
TST: Added test for Excel writers with duplicated column names.
Test for issue #5235
1 parent 0aa1800 commit 362e898

File tree

3 files changed

+24
-4
lines changed

3 files changed

+24
-4
lines changed

doc/source/release.rst

+2
Original file line numberDiff line numberDiff line change
@@ -611,6 +611,8 @@ Bug Fixes
611611
the original ordering (:issue:`4621`).
612612
- Fixed ``Period`` with a business date freq to always roll-forward if on a
613613
non-business date. (:issue:`5203`)
614+
- Fixed bug in Excel writers where frames with duplicate column names weren't
615+
written correctly. (:issue: `5235`)
614616

615617
pandas 0.12.0
616618
-------------

pandas/core/format.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -1371,8 +1371,8 @@ def _format_regular_rows(self):
13711371
for idx, idxval in enumerate(index_values):
13721372
yield ExcelCell(self.rowcounter + idx, 0, idxval, header_style)
13731373

1374-
for colidx, colname in enumerate(self.columns):
1375-
series = self.df[colname]
1374+
for colidx in range(len(self.columns)):
1375+
series = self.df.iloc[:, colidx]
13761376
for i, val in enumerate(series):
13771377
yield ExcelCell(self.rowcounter + i, colidx + coloffset, val)
13781378

@@ -1408,8 +1408,8 @@ def _format_hierarchical_rows(self):
14081408
indexcolval, header_style)
14091409
gcolidx += 1
14101410

1411-
for colidx, colname in enumerate(self.columns):
1412-
series = self.df[colname]
1411+
for colidx in range(len(self.columns)):
1412+
series = self.df.iloc[:, colidx]
14131413
for i, val in enumerate(series):
14141414
yield ExcelCell(self.rowcounter + i, gcolidx + colidx, val)
14151415

pandas/io/tests/test_excel.py

+18
Original file line numberDiff line numberDiff line change
@@ -874,6 +874,24 @@ def roundtrip(df, header=True, parser_hdr=0):
874874
self.assertEqual(res.shape, (1, 2))
875875
self.assertTrue(res.ix[0, 0] is not np.nan)
876876

877+
def test_duplicated_columns(self):
878+
# Test for issue #5235.
879+
_skip_if_no_xlrd()
880+
ext = self.ext
881+
path = '__tmp_to_excel_duplicated_columns__.' + ext
882+
883+
with ensure_clean(path) as path:
884+
write_frame = DataFrame([[1, 2, 3], [1, 2, 3], [1, 2, 3]])
885+
colnames = ['A', 'B', 'B']
886+
887+
write_frame.columns = colnames
888+
write_frame.to_excel(path, 'test1')
889+
890+
read_frame = read_excel(path, 'test1').astype(np.int64)
891+
read_frame.columns = colnames
892+
893+
tm.assert_frame_equal(write_frame, read_frame)
894+
877895

878896
class OpenpyxlTests(ExcelWriterBase, unittest.TestCase):
879897
ext = 'xlsx'

0 commit comments

Comments
 (0)