Пустая строка под заголовками, созданными при использовании MultiIndex и to_excel в Python

2

Я пытаюсь сохранить файл данных Pandas в файл excel, используя функцию to_excel с XlsxWriter.

Когда я печатаю dataframe на терминал, тогда он читается так, как должен, но когда я сохраняю его, чтобы преуспеть и открывать файл, над заголовками должна быть дополнительная пустая строка, которой не должно быть. Это происходит только при использовании MultiIndex для заголовков, но мне нужны слоистые заголовки, которые он предлагает, и я не могу найти решение.

Ниже приведен код из онлайн-примера MultiIndex, который дает тот же результат, что и проект, над которым я работаю. Любые решения будут высоко оценены.

import numpy as np
import pandas as pd
import xlsxwriter

tuples = [('bar', 'one'), ('bar', 'two'), ('baz', 'one'), ('baz', 'two'), ('foo', 'one'), ('foo', 'two'), ('qux', 'one'), ('qux', 'two')]

index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second'])

iterables = [['bar', 'baz', 'foo', 'qux'], ['one', 'two']]

pd.MultiIndex.from_product(iterables, names=['first', 'second'])

df = pd.DataFrame(np.random.randn(3, 8), index=['A', 'B', 'C'], columns=index)

print(df)

writer = pd.ExcelWriter('test.xlsx', engine='xlsxwriter')
df.to_excel(writer, sheet_name='test1')

Выход excel создан: Изображение 174551

Теги:
pandas
multi-index
xlsxwriter

2 ответа

2
Лучший ответ

Скорее всего, это ошибка в пандах.

См. Этот вопрос для предлагаемого решения:

Нелегкий выход из этого, но удалить эту строку, снова прочитав xlsx.

Также есть ссылка на проблему GitHub, рассматривая эту тему.

Поэтому я сделал это решение, это может быть полезно для вас:

df = pd.read_excel('/home/teoretic/test.xlsx', index_col=0)
df = df.drop(np.nan)  # <== dropping an empty row

rename_dct = dict.fromkeys(df.loc[:,df.columns.str.contains('^Unnamed')], '')
df = df.rename(columns=rename_dct)  # <== renaming 'Unnamed' columns to blank space 

writer = pd.ExcelWriter('/home/teoretic/test_new.xlsx', engine='xlsxwriter')
df.to_excel(writer, sheet_name='test1')

writer.close()

Это выходной файл: Изображение 174551

  • 0
    Большое спасибо за ответ, я надеялся, что будет способ объединить верхний ряд ячеек, но не беспокоиться.
  • 0
    Я пытался сохранить multiindex, но потом я в конечном итоге столкнулся с той же проблемой «пустой строки» в конце при сохранении его в xlsx . Не нашел выхода, но это не идеальный обходной путь :)
Показать ещё 3 комментария
0

Очень ценю как вопрос, так и обход @Teoretic.

Однако в моем случае объединенные ячейки для столбцов Multiindex очень полезны, и они теряются с @Teoretic's. Я сделал альтернативный обходной путь, скрывая всю строку перед записью, она работает, поэтому я включаю ее здесь на случай, если это пригодится кому-либо.

writer = pd.ExcelWriter('test.xlsx', engine='xlsxwriter')
df.to_excel(writer, sheet_name='test1')
writer.sheets['test1'].set_row(2, None, None, {'hidden': True})
writer.save()

Ещё вопросы

Сообщество Overcoder
Наверх
Меню