Фильтр условного форматирования в листе Excel с использованием pandas - PullRequest
0 голосов
/ 27 января 2020

У меня есть файл Excel, который имеет условное форматирование красным цветом в определенных строках одного из столбцов. Таким образом, мой файл выглядит следующим образом:

enter image description here

Теперь мне нужно применить фильтр к столбцу «Колледж», чтобы удалить все строки, которые имеют красный цвет. цветной фон.

enter image description here

И сохраните его обратно в файл.

Код, который я написал для этого:

dataFrame_file = pd.read_excel(util.comcastFile2Path(), sheet_name='Sheet1')  //comcastFile2Path() gives path of file
def only_cells_with_red_background(cell):
    return cell if cell.style.bg_color in {utils.colors.red, 'FFFF0000'} else np.nan

df=dataFrame_file.style.applymap(only_cells_with_red_background,subset=['College'])
util.mergeFile(dataFrame_file,df,util.comcastFile2Path)

И мой метод утилит для слияния и сохранения файла выглядит следующим образом

def mergeFile(dataFrame_file, delete_frame, comcastFileName):
    dataFrame_file = dataFrame_file.merge(delete_frame, how='left', indicator=True).query(
        '_merge == "left_only"').drop('_merge', 1)
    saveFile(dataFrame_file,comcastFileName)

Когда я делаю это, я получаю ошибку:

TypeError: Can only merge Series or DataFrame objects, a <class 'pandas.io.formats.style.Styler'> was passed

Как мне двигаться дальше с этим?

Заранее спасибо.

1 Ответ

2 голосов
/ 27 января 2020

pd.read_excel не читает стиль из файла Excel.

Поскольку вы пометили вопрос с помощью Я полагаю, вы хотели прочитать файл с помощью StyleFrame.read_excel(util.comcastFile2Path(), sheet_name='Sheet1', read_style=True).

Тогда вам также не нужно использовать df.merge. Вы можете просто выбрать строки без красного фона и сохранить новый объект StyleFrame:

from StyleFrame import StyleFrame, utils

def no_red_background_cell(cell):
    return cell if cell.style.bg_color not in {utils.colors.red, 'FFFF0000'} else np.nan

sf = StyleFrame.read_excel(util.comcastFile2Path(), sheet_name='Sheet1', read_style=True)
sf = StyleFrame(sf.applymap(no_red_background_cell).dropna(axis=(0, 1), how='all'))
sf.to_excel('output.xlsx').save()
...