本节主要是讨论如何利用xlsxwriter第三方excel模块,对excel表格进行有条件的输出。
假设有如下产品,由产品ID与费用组成
Cost列中数字随机生成
希望在Cost列,将费用最高的3个价格标浅红色,并对ID/Cost 两列中的单元格修改格式。
前3高的费用标浅红色
该程序主要分三块内容:
一、创建DataFrame
二、确定前3个最高的费用
三、用xlsxwriter 参数定义单元格格式和条件格式

一、创建DataFrame
1、定义excel表格的输出路径;
2、创建DataFrame;
3、Pandas 调用xlsxwriter

import numpy as np 
import pandas as pd
import xlsxwriter 
from pandas import Series,DataFrame
path_out=r'D:\4_pandas_conditional_format.xlsx'
#对cost列随机生成数字,randint生成的是个array [[x1,x2,x3,...,x10]], 为了取其中的
#[x1,x2,x3,...,x10],用[0],然后再list为列表。
df=DataFrame({'ID':np.arange(1,11,1),'Cost':list(np.random.randint(20,100,size=(1,10))[0])})
#pandas 调用xlsxwriter
writer=pd.ExcelWriter(path_out,engine='xlsxwriter')
#index=False 不要将DataFrame中的index输入到excel表格中。
df.to_excel(writer,sheet_name='Item',index=False) 

二、确定前3高的费用
后面会用xlsxwriter的conditional format,里面有选项,比如大于某个值用啥颜色。
因此,确定前3高费用可转换为查找第4个最大值。

def findKthLargestNumber(df,k):
    list_num=df['Cost'].values.tolist() #将Cost列转为列表
    list_num.sort(reverse=True) #value值从大到小排列
    return list_num[k-1]  #list列表中从0开始计数,减1. 
kth_number=findKthLargestNumber(df,4)

三、用xlsxwriter 参数定义单元格格式和条件格式
1、定义单元格格式,cell format;
2、定义条件格式,conditional format

workbook=writer.book
worksheet=writer.sheets['Item']
#定义单元格样式:不是粗体,字体为微软雅黑,大小:9,横向、纵向都居中,不要单元格的周边框
#针对单元格,xlsxwriter官网中明确规定了注意事项:
#It isn’t possible to format any cells that already have a format 
#such as the index or headers or any cells that contain dates or datetimes.
#Note: This feature requires Pandas >= 0.16 
cell_fmt={'bold':False,'font_name':'微软雅黑','font_size':9,'align':'center','valign':'vcenter','border':0} 
#定义颜色单元格颜色,FFC7CE means light red
color_fmt={'bg_color': '#FFC7CE'}
#定义列名的格式(ID,Cost)
header_fmt={'bold':True,'font_name':'微软雅黑','font_size':9,'align':'center','valign':'vcenter','border':0}
cell_format=workbook.add_format(cell_fmt)
color_format=workbook.add_format(color_fmt)
header_format=workbook.add_format(header_fmt)
#对A、B两列列宽调整为15,单元格样式采用cell_format
worksheet.set_column('A:B',15,cell_format)
#对B2~B11的单元格,凡是大于第4个最大数字(kth_number),将标记为浅红色(color_format)
worksheet.conditional_format('B2:B11',{'type':'cell','criteria':'>','value':kth_number,'format':color_format})
#对列名(ID,Cost)写入到excel表格中,并采用header_format格式。
for colx,value in enumerate(df.columns.values):
    worksheet.write(0,colx,value,header_format)
writer.save()#保存

初学python有很多不足,望各位大佬不吝赐教,多谢了。
学习python目的:主要是实现办公自动化,对excle、word、PPT、邮件等自动化处理,对销售数据进行综合分析,便于规划及汇报。

这里写自定义目录标题如何对新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入如何对你好! 这是你第一次使用 M... 这款变色龙app封装系统源码更适合小企业主和个人用户,打包过程简单方便快捷。系统基于thinkphp开发,附件为变色龙app封装系统源码官方正版下载,无毒无后门,原汁原味。 源码功能介绍 1、App封装:实现App封装,混合开发App,100多JS接口功能交互。 2、制作小程序:通过接口网站封装成小程序。 ———————————————— 版权声明:本文为CSDN博主「源码庄」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/stao1272019810/article/details/120747968
主要是介绍xlsxwrite模块的单元格的字体等颜色设置,一般常用的设置就5项:字体颜色、字体是否加粗、字体对齐方式、单元格对齐方式和单元格的背景颜色 import xlsxwriter workbook = xlsxwriter.Workbook("/Users/tmac/前mac电脑资料/zhang/test.xlsx") worksheet = workbook.add_worksheet(...
怎么样使用Python提高自己的工作效率,今天就给大家分享这个吧。我们经常用pandas读入读写excel文件,经常会遇到一个excel文件里存在多个sheet文件,这个时候,就需要一次性读取多个sheet的数据并做相应的数据分析或数据处理,最后再写入新的excel文件(同样是多个sheet)。本文即介绍多个sheet文件的读入及处理数据后写出到新excel文件(多个sheet)的操作过程。 所有sheet的内容都读入至df中。 查看所有sheet名 查看某一个sheet 在每个sheet中新增一列 一、功能比较强 相对而言,这是除Excel自身之外功能最强的工具了。比如我就用到了它提供的:字体设置、前景色背景色、border设置、视图缩放(zoom)、单元格合并、autofilter、freeze panes、公式、data validation、单元格注释、行高和列宽设置等等。 二、支持大文件写入 如果数据量非常大,可以启用constant memory模式,这是一种顺序写入模式,得到一行数据就.
pandas ExcelWriter定制格式(定制表头、渲染颜色等,非ExcelWriter标准的创建模式) ExcelWriter这个插件有个坑,就是已经设置好的格式是无法更改的,因此,由pandas转成excel的时候,必须将格式清除,尤其是表头的格式,代码如下: import pandas.io.formats.excel pandas.io.formats.excel.header_...
workbook = xlsxwriter.Workbook('existing_file.xlsx') worksheet = workbook.add_worksheet() worksheet.write('A1', 'Hello, world!') workbook.close() 打开已有的excel文件: import xlsxwriter workbook = xlsxwriter.Workbook('existing_file.xlsx') worksheet = workbook.add_worksheet() worksheet.write('A1', 'Hello, world!') workbook.close() 注意:如果文件不存在,会抛出错误。