我可以使用Pandas从excel文件导入数据:
xl = read_excel('path_to_file.xls', 'Sheet1', index_col=None, na_values=['NA'])
现在我将xl中的所有数据都作为DataFrame。我想根据另一个函数中定义的条件为该数据中的一些单元格着色,并将其导出(使用颜色编码)到Excel文件。
有人能告诉我该怎么办?
谢谢。
答案 0 :(得分:11)
Pandas有一个相对较新的Styler
功能,您可以将条件格式类型操作应用于数据帧。
http://pandas.pydata.org/pandas-docs/stable/style.html
您可以使用某些内置函数(如background_gradient
或bar
)来复制类似excel的功能,例如条件格式和数据栏。您还可以格式化单元格以显示百分比,浮点数,整数等,而无需更改原始数据帧。
以下是您可以使用Styler
制作的图表类型示例(这是一个无意义的图表,但仅用于演示功能):
要利用Styler
的全部功能,您应该熟悉Styler.apply()
和Styler.applymap()
API。这些允许您创建自定义函数并将它们应用于表的列,行或元素。例如,如果我想将+ ive单元格绿色和红色单元格着色,我会创建一个函数
def _color_red_or_green(val):
color = 'red' if val < 0 else 'green'
return 'color: %s' % color
并在我的Styler
对象上调用它,即df.style.applymap(_color_red_or_green)
。
关于导出回Excel,据我所知,Styler
不支持这种情况,所以如果您出于某种原因需要Excel,我可能会使用xlsxwriter路径。但是,根据我的经验,这是一个很好的纯Python替代方案,例如matplotlib图表和电子邮件/报告。
答案 1 :(得分:1)
尝试这样的事情:
with pandas.io.excel.ExcelWriter(path=Path, engine="xlsxwriter") as writer:
sheet = writer.book.worksheets()[0]
sheet.write(x, y, value, format) #format is what determines the color etc.
答案 2 :(得分:0)
关于Pandas website上的单元格样式,有很多想法。 然而,它被提到:这是一个新功能,仍在开发中。我们将在未来版本中添加功能并可能进行重大更改
答案 3 :(得分:0)
最简单的方法是如果只想突出显示某些值,则使用applymap和lambda:
df.style.applymap(lambda x: "background-color: red" if x>0 else "background-color: white")