python - 循环遍历 pandas xlsxwriter 表

标签 python pandas xlsxwriter

我想使用 Pandas 在 Excel 工作表中创建条件格式。如果 A 列和 B 列小于 C 列中的相应值,则它们应该是红色的。我如何正确地完成它,为什么我的循环提前停止了 2 行?

import numpy as np
import pandas as pd

d = pd.DataFrame(np.random.randint(1, 4, (15, 3)), columns = ['A', 'B', 'C'])

writer = pd.ExcelWriter('c:\\users\\MYNAME\\desktop\\xl_loop.xlsx') # please change!
d.to_excel(writer, 'Sheet1', index = False)
worksheet = writer.sheets['Sheet1']

for i in (range(d.shape[0])):
    worksheet.conditional_format(
        'A{}:B{}'.format(i, i),
        {'type': 'icon_set',
         'icon_style': '3_traffic_lights',
         'icons': [{'criteria': '>', 'type': 'number', 'value': d.iloc[i, 2]},
                    {'criteria': '=', 'type': 'number', 'value': d.iloc[i, 2]},
                    {'criteria': '<', 'type': 'number', 'value': d.iloc[i, 2]} ]} )
writer.save()

最佳答案

您的范围计算和定位中有几个差一错误,这就是为什么您的范围短 2 行的原因。

但是,没有必要为每一行创建条件格式。您可以按如下方式为整个范围创建一个:

import numpy as np
import pandas as pd

d = pd.DataFrame(np.random.randint(1, 4, (15, 3)), columns = ['A', 'B', 'C'])

writer = pd.ExcelWriter('xl_loop.xlsx')
d.to_excel(writer, 'Sheet1', index = False)

workbook  = writer.book
worksheet = writer.sheets['Sheet1']

red_format = workbook.add_format({'bg_color': '#FFC7CE',
                                  'font_color': '#9C0006'})

start_row = 1
end_row   = start_row + d.shape[0] -1
start_col = 0
end_col   = 1

worksheet.conditional_format(start_row, start_col, end_row, end_col,
    {'type': 'cell',
     'criteria': '<',
     'value': '$C2',
     'format': red_format})

writer.save()

输出:

enter image description here

关于python - 循环遍历 pandas xlsxwriter 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49735353/

相关文章:

python - 如何在指定时间后中止并重试 ftp 下载?

python - 如何制作一个函数,一次返回一个列表中的项目?

python - 在同一时间戳下对 csv 数据进行分组

python - 如何使用 xlsxwriter 将格式添加到现有格式对象 "on the fly"

python - xlsxwriter 中的日期条件格式格式化空白单元格和符合条件的单元格

python - buildout+setuptools 和 git 项目 fork

python - 是最小堆函数

python - 在 Pandas 中将列分成两部分的简单方法

python - 如何按日期排序,然后按日期添加另一列的总计

python - plt.savefig 不会覆盖现有文件