@ftftftftftftff
frontend developer

Как удалить нумерацию и пустую строку в excel pandas?

У меня есть датафрейм которому я создаю мультииндекс через, а затем сохраняю в excel:
df.columns = pd.MultiIndex.from_tuples(df_columns)
df.to_excel('excel.xlsx', sheet_name='Лист1', index=True)

В Excel файле у меня создается таблица:
646f09b0638d5497721621.png
Я хочу чтобы в ней не было колонки с нумерацией и пустой 3 строки , пробовал передавать атрибут index=False, но тогда у меня пропадает самая первая строка Начальные данные -Результаты
  • Вопрос задан
  • 302 просмотра
Решения вопроса 1
Maksim_64
@Maksim_64
Data Analyst
Из коробки решения нет не для одной из твоих проблем. Ему нужен индекс, для того что бы сохранять иерархическую структуру.

Можно ли это обойти, ну в программировании можно много чего обойти, вопрос а НУЖНО ли это, так или иначе, если хочется НЕНУЖНЫХ изобретений, то можно разбить проблему на две части отдельно писать иерархический header, отдельно данные, чего я бы на практике я не делал (чревато тем что, таблица "сдвинется куда нибудь") и вот тогда действительно проблематично.

Удалить только пропущенную строку можно "относительно" безопасно.
def write(df, xl_writer, startrow = 0,**kwargs):
   
    df.drop(df.index).to_excel(xl_writer, startrow = startrow,**kwargs)
    df.to_excel(xl_writer, startrow = startrow + 1,header = False,**kwargs)
    
writer = pd.ExcelWriter("test_only_removed_empty_row.xlsx",engine='xlsxwriter')
write(df, writer, sheet_name = 'Лист1')
writer.close()

Это более менее безопасно, удаление индекса все еще возможно, но приходится начинать ловить сдвиги, для общего случая ТАК ДЕЛАТЬ НЕЛЬЗЯ. Так или иначе, ужасная функция которая сделает это вот
def write(df, xl_writer, startrow = 0,startcol=0,**kwargs):
   
    df.drop(df.index).to_excel(xl_writer, startrow = startrow,startcol=startcol,**kwargs)
    df.droplevel(0,axis=1).to_excel(xl_writer, startrow = startrow + 2, startcol=startcol+1,header = False,index=False,**kwargs)
    
writer = pd.ExcelWriter("bad_practice.xlsx",engine='xlsxwriter')
write(df, writer, sheet_name = 'Лист1')
writer.close()


Ну и в завершение, повторюсь, написание иерархических колонок, без индекса (index=False). Попросту выдает ошибку NotImplemented (Это не поддерживается текущим API). А вот такие "решения", как я продемонстрировал сомнительны. И да возможно, если не уставлен, придется установить xlsxwriter, или убрать параметр engine, что бы он использовал свой, там openpyxl по умолчанию стоит.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы