Skip to content

Commit a30c847

Browse files
author
locojaydev
committed
write index labels in same row as columns
1 parent 67ef67f commit a30c847

File tree

2 files changed

+21
-17
lines changed

2 files changed

+21
-17
lines changed

pandas/core/format.py

+11-2
Original file line numberDiff line numberDiff line change
@@ -863,9 +863,14 @@ def _format_regular_rows(self):
863863
index_label = self.df.index.names[0]
864864

865865
if index_label:
866-
yield ExcelCell(self.rowcounter, 0,
866+
# add to same level as column names
867+
if isinstance(self.df.columns, MultiIndex):
868+
yield ExcelCell(self.rowcounter, 0,
869+
index_label, header_style)
870+
self.rowcounter += 1
871+
else:
872+
yield ExcelCell(self.rowcounter - 1, 0,
867873
index_label, header_style)
868-
self.rowcounter += 1
869874

870875
#write index_values
871876
index_values = self.df.index
@@ -895,6 +900,10 @@ def _format_hierarchical_rows(self):
895900

896901
#if index labels are not empty go ahead and dump
897902
if filter(lambda x: x is not None, index_labels):
903+
if isinstance(self.df.columns, MultiIndex):
904+
self.rowcounter += 1
905+
else:
906+
self.rowcounter -= 1
898907
for cidx, name in enumerate(index_labels):
899908
yield ExcelCell(self.rowcounter, cidx,
900909
name, header_style)

pandas/io/tests/test_excel.py

+10-15
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,7 @@ def _check_extension(self, ext):
257257
# test roundtrip
258258
self.frame.to_excel(path,'test1')
259259
reader = ExcelFile(path)
260-
recons = reader.parse('test1', index_col=0, has_index_names=True)
260+
recons = reader.parse('test1', index_col=0)
261261
tm.assert_frame_equal(self.frame, recons)
262262

263263
self.frame.to_excel(path,'test1', index=False)
@@ -268,8 +268,7 @@ def _check_extension(self, ext):
268268

269269
self.frame.to_excel(path,'test1',na_rep='NA')
270270
reader = ExcelFile(path)
271-
recons = reader.parse('test1', index_col=0, na_values=['NA'],
272-
has_index_names=True)
271+
recons = reader.parse('test1', index_col=0, na_values=['NA'])
273272
tm.assert_frame_equal(self.frame, recons)
274273

275274
os.remove(path)
@@ -290,7 +289,7 @@ def _check_extension_mixed(self, ext):
290289

291290
self.mixed_frame.to_excel(path,'test1')
292291
reader = ExcelFile(path)
293-
recons = reader.parse('test1', index_col=0, has_index_names=True)
292+
recons = reader.parse('test1', index_col=0)
294293
tm.assert_frame_equal(self.mixed_frame, recons)
295294

296295
os.remove(path)
@@ -397,7 +396,7 @@ def _check_extension_sheets(self, ext):
397396
self.tsframe.to_excel(writer,'test2')
398397
writer.save()
399398
reader = ExcelFile(path)
400-
recons = reader.parse('test1',index_col=0, has_index_names=True)
399+
recons = reader.parse('test1',index_col=0)
401400
tm.assert_frame_equal(self.frame, recons)
402401
recons = reader.parse('test2',index_col=0)
403402
tm.assert_frame_equal(self.tsframe, recons)
@@ -429,7 +428,7 @@ def _check_extension_colaliases(self, ext):
429428
col_aliases = Index(['AA', 'X', 'Y', 'Z'])
430429
self.frame2.to_excel(path, 'test1', header=col_aliases)
431430
reader = ExcelFile(path)
432-
rs = reader.parse('test1', index_col=0, has_index_names=True)
431+
rs = reader.parse('test1', index_col=0)
433432
xp = self.frame2.copy()
434433
xp.columns = col_aliases
435434
tm.assert_frame_equal(xp, rs)
@@ -458,24 +457,21 @@ def _check_extension_indexlabels(self, ext):
458457
frame = (DataFrame(np.random.randn(10,2)) >= 0)
459458
frame.to_excel(path, 'test1', index_label=['test'])
460459
reader = ExcelFile(path)
461-
recons = reader.parse('test1', index_col=0,
462-
has_index_names=True).astype(np.int64)
460+
recons = reader.parse('test1', index_col=0).astype(np.int64)
463461
frame.index.names = ['test']
464462
self.assertEqual(frame.index.names, recons.index.names)
465463

466464
frame = (DataFrame(np.random.randn(10,2)) >= 0)
467465
frame.to_excel(path, 'test1', index_label=['test', 'dummy', 'dummy2'])
468466
reader = ExcelFile(path)
469-
recons = reader.parse('test1', index_col=0,
470-
has_index_names=True).astype(np.int64)
467+
recons = reader.parse('test1', index_col=0).astype(np.int64)
471468
frame.index.names = ['test']
472469
self.assertEqual(frame.index.names, recons.index.names)
473470

474471
frame = (DataFrame(np.random.randn(10,2)) >= 0)
475472
frame.to_excel(path, 'test1', index_label='test')
476473
reader = ExcelFile(path)
477-
recons = reader.parse('test1', index_col=0,
478-
has_index_names=True).astype(np.int64)
474+
recons = reader.parse('test1', index_col=0).astype(np.int64)
479475
frame.index.names = ['test']
480476
self.assertEqual(frame.index.names, recons.index.names)
481477

@@ -555,8 +551,7 @@ def _check_excel_multiindex(self, ext):
555551
# round trip
556552
frame.to_excel(path, 'test1')
557553
reader = ExcelFile(path)
558-
df = reader.parse('test1', index_col=[0,1], parse_dates=False,
559-
has_index_names=True)
554+
df = reader.parse('test1', index_col=[0,1], parse_dates=False)
560555
tm.assert_frame_equal(frame, df)
561556
self.assertEqual(frame.index.names, df.index.names)
562557
self.frame.index = old_index # needed if setUP becomes a classmethod
@@ -583,7 +578,7 @@ def _check_excel_multiindex_dates(self, ext):
583578

584579
tsframe.to_excel(path, 'test1', index_label = ['time','foo'])
585580
reader = ExcelFile(path)
586-
recons = reader.parse('test1', index_col=[0,1], has_index_names=True)
581+
recons = reader.parse('test1', index_col=[0,1])
587582
tm.assert_frame_equal(tsframe, recons)
588583

589584
# infer index

0 commit comments

Comments
 (0)