Как обновить часть существующего листа Excel с отфильтрованным фреймом данных? - PullRequest
0 голосов
/ 05 января 2019

У меня есть книга Excel с несколькими листами. Мне нужно прочитать часть с одного из листов, получить отфильтрованный фрейм данных и записать одно значение из этого отфильтрованного фрейма данных в определенную ячейку на том же листе. Каков наилучший способ сделать это, в идеале, не открывая книгу Excel? Мне нужно запустить это на Linux, поэтому не могу использовать xlwings. Я не хочу писать весь лист, а просто выделенную ячейку / смещение внутри него. Я попытался написать следующее на существующий лист, но, похоже, у меня не работает (обновление в нужной ячейке не происходит):

with pd.ExcelWriter('test.xlsx', engine='openpyxl') as writer:
    writer.book = load_workbook('test.xlsx')
    df_filtered.to_excel(writer, 'Sheet_Name', columns=['CS'], startrow=638, startcol=96)

Любые советы будут полезны. Спасибо.

1 Ответ

0 голосов
/ 05 января 2019

Если вы пишете только одну ячейку, вам должно хватить следующего:

import pandas as pd
import openpyxl

df = pd.DataFrame(data=[1,2,3], columns=['col'])
filtered_dataframe = df[df.col == 1].values[0][0]

filename = 'test.xlsx'
wb = openpyxl.load_workbook(filename)
wb['Sheet1'].cell(column=1, row=2, value=filtered_dataframe)
wb.save(filename)

Я полагаю, ваша проблема заключалась в том, что вы никогда не вызывали метод сохранения писателя.

...