熊猫中的着色细胞

时间:2015-01-21 19:53:41

标签: python pandas ipython

我可以使用Pandas从excel文件导入数据:

xl = read_excel('path_to_file.xls', 'Sheet1', index_col=None, na_values=['NA'])    

现在我将xl中的所有数据都作为DataFrame。我想根据另一个函数中定义的条件为该数据中的一些单元格着色,并将其导出(使用颜色编码)到Excel文件。

有人能告诉我该怎么办?

谢谢。

4 个答案:

答案 0 :(得分:11)

Pandas有一个相对较新的Styler功能,您可以将条件格式类型操作应用于数据帧。 http://pandas.pydata.org/pandas-docs/stable/style.html

您可以使用某些内置函数(如background_gradientbar)来复制类似excel的功能,例如条件格式和数据栏。您还可以格式化单元格以显示百分比,浮点数,整数等,而无需更改原始数据帧。

以下是您可以使用Styler制作的图表类型示例(这是一个无意义的图表,但仅用于演示功能):

enter image description here

要利用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.

此处有更多信息:https://xlsxwriter.readthedocs.org/format.html

答案 2 :(得分:0)

关于Pandas website上的单元格样式,有很多想法。 然而,它被提到:这是一个新功能,仍在开发中。我们将在未来版本中添加功能并可能进行重大更改

答案 3 :(得分:0)

最简单的方法是如果只想突出显示某些值,则使用applymap和lambda:

df.style.applymap(lambda x: "background-color: red" if x>0 else "background-color: white")