Форматирование ячеек на основе диапазона данных панд - PullRequest
2 голосов
/ 22 мая 2019

У меня есть два кадра данных панд, как показано ниже. Я хочу изменить цвет шрифта всех строк во 2-м кадре данных (df2) на красный (код должен принимать диапазон данных, а не A7: A8, поскольку диапазон может увеличиваться или уменьшаться в зависимости от кадра данных)

import pandas as pd

df1 = pd.DataFrame({'Data1': [10, 20, 30],
                   'Data2': [11, 21, 31],
                   'Date': [pd.to_datetime('today'), 
                            "", 
                            pd.to_datetime('today')]})
df2 = pd.DataFrame({'Data1': ["A", "B"]})

writer = pd.ExcelWriter('pandas_filter.xlsx', engine='xlsxwriter', )
workbook  = writer.book

df1.to_excel(writer, sheet_name='Sheet1', index=False)
df2.to_excel(writer, sheet_name='Sheet1', index=False, startrow=df1.shape[0]+2 , startcol=0)
writer.save()

Я ожидаю вывод, как показано на скриншоте ниже enter image description here

Код ниже, похоже, не работает:

import pandas as pd

df1 = pd.DataFrame({'Data1': [10, 20, 30],
                   'Data2': [11, 21, 31],
                   'Date': [pd.to_datetime('today'), 
                            "", 
                            pd.to_datetime('today')]})
df2 = pd.DataFrame({'Data1': ["A", "B"]})

writer = pd.ExcelWriter('pandas_filter.xlsx', engine='xlsxwriter', )
workbook  = writer.book

df1.to_excel(writer, sheet_name='Sheet1', index=False)
df2.to_excel(writer, sheet_name='Sheet1', index=False, startrow=df1.shape[0]+2 , startcol=0)

def to_red():
    return 'color: red'

df2.style.applymap(to_red)

writer.save()

1 Ответ

1 голос
/ 22 мая 2019

Вам необходимо передать параметр в вашей определенной функции, и вы должны повторно назначить объект стиля обратно в df2.

Попробуйте:

df1 = pd.DataFrame({'Data1': [10, 20, 30],
                   'Data2': [11, 21, 31],
                   'Date': [pd.to_datetime('today'), 
                            "", 
                            pd.to_datetime('today')]})
df2 = pd.DataFrame({'Data1': ["A", "B"]})

writer = pd.ExcelWriter('pandas_filter.xlsx', engine='xlsxwriter', )
workbook  = writer.book


#Note change in following line
def to_red(val):
    return 'color: red'

df2 = df2.style.applymap(to_red)
#Note move write lines after saving stying to df2 variable again.
df1.to_excel(writer, sheet_name='Sheet1', index=False)
df2.to_excel(writer, sheet_name='Sheet1', index=False, startrow=df1.shape[0]+2 , startcol=0)

writer.save()

Вывод:

enter image description here

...