Как я могу скопировать фрейм данных python на листе Excel с условиями в цветах ячеек?

#python #excel #pandas #dataframe #xlwings

#python #excel #панды #фрейм данных #xlвинги

Вопрос:

Пожалуйста, мне нужна ваша помощь.

Я хочу скопировать фрейм данных Excel в лист Excel, но только для белых ячеек, я использую actuall xl wings. фрейм данных pandas
excel sheet

Я не хочу копировать в красных клетках.

Ниже приведен мой код на python :

 import pandas as pd
import xlwings as xw
#dataframe creation
d = {'col1': [1, 2], 'col2': [3, 4]}
df = pd.DataFrame(data=d)
df

#Copy in a excel sheet with xl wings

wb=xw.Book()
ws=wb.sheets['Feuil1']
ws.range("A1").options(index=False).value=df 
 

Комментарии:

1. непонятно, чего вы хотите. Я полагаю, вы хотите применить стили к фрейму данных pandas на основе условий Excel, правильно?

2. df.to_excel('filename', sheet_names='Feuil1') мог бы помочь

3. @Yuca, я редактирую свой вопрос.

4. Я хочу скопировать фрейм данных python в Excel, но копирую только белые ячейки. С помощью xl wings я могу скопировать фрейм данных, но я не знаю, как добавить условие для копирования только в белые ячейки Excel.

5. @PaulBrennan, спасибо, но я знаю, как экспортировать фрейм данных в Excel, мой вопрос в том, как скопировать фрейм данных pandas на листе Excel, созданном xl wings, и копировать только в белые ячейки

Ответ №1:

Если я понял ваш вопрос…

Вы можете использовать pandas Excel writer (посмотрите также параметры to_excel ):

 writer = pd.ExcelWriter("Output.xlsx", engine='xlsxwriter')

# Convert the dataframe to an XlsxWriter Excel object.
df.to_excel(writer, sheet_name='Feuil1')

# Get the xlsxwriter workbook and worksheet objects.
workbook  = writer.book
worksheet = writer.sheets['Feuil1']

# Add some cell formats
header_format = workbook.add_format({
    'bold': True,
    'text_wrap': True,
    'valign': 'vcenter',
    'align': 'center',
    'bottom': 1}
)

# Create a base format
format1 = workbook.add_format({'align': 'center', 'border': False})

# Create a "red" format
format2 = workbook.add_format({'bg_color': '#FFC7CE',
                               'font_color': '#9C0006'})

# Create a "green" format
format3 = workbook.add_format({'bg_color': '#CDFFC7',
                               'font_color': '#324f2F'})

# Set the column width and format
worksheet.set_column('A:N', 16, format1)
worksheet.conditional_format(
    'A1:N800',
    {'type': 'cell', 'criteria': '==', 'value': '"no data"','format': format2}
)

worksheet.conditional_format(
    'A1:N500',
    {'type': 'cell', 'criteria': '==', 'value': '"not applicable"', 'format': format3}
)

# Write the column headers with the defined format.
for col_num, value in enumerate(df.columns.values):
    worksheet.write(0, col_num, value, header_format)
 

Здесь вы можете найти большой учебник

Комментарии:

1. @Rhoman Zhuravlev, спасибо, но это не отвечает на мой вопрос, спасибо, мой вопрос в том, как скопировать фрейм данных pandas на листе Excel, созданном xl wings, и скопировать только белые ячейки. Пожалуйста, ознакомьтесь с примерами листа Excel и фрейма данных.

Ответ №2:

На картинке вашего листа Excel показаны красные ячейки без какого-либо содержимого. Это означает, что должно сработать следующее решение.
Просто скопируйте фрейм данных, как вы уже сделали в своем вопросе, а затем удалите содержимое ячеек с красным цветом фона. Просто добавьте следующие строки в свой код:

 for cell in ws.used_range:
    if cell.api.Interior.Color == xw.utils.rgb_to_int((217,217,217)):
        cell.clear_contents()
 

Вам нужно заполнить значения RGB вашего цвета фона .rgb_to_int((217,217,217)) .