我想做两件事:

  1. 用红色突出显示数据帧的‘NaN’值.
  2. 将数据帧添加到PDF文件.

我能够在PDF页面中成功地显示dataframe个值,但是NaN个值不会在PDF中反映为红色.

我try 了以下代码:

    df.style.highlight_null('red') 

    with PdfPages('stale_curve_report.pdf') as pdf:
      fig, ax = plt.subplots()
      ax.axis('off')
      ax.table(cellText=df.values, colLabels=df.columns, rowLabels=df.index, loc='center',colWidths=[0.12] * 15)
      pdf.savefig(fig)
      plt.close(fig)

我还试过其他几种方法:

sns.heatmap(df.isna(), cmap=['red', 'white', 'white'])

我想,我需要ax.table中的一个选项来突出显示数据帧.

推荐答案

这可以通过在ax.table函数中创建cellColors种 colored颜色 的列表来实现.为此,我们创建了一个逻辑数据帧color = df.isna(),用所需的 colored颜色 替换接收到的TrueFalse,并将其转换为列表.示例:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.backends.backend_pdf import PdfPages

df = pd.DataFrame(np.random.random((10, 3)), columns=("col 1", "col 2", "col 3"))
df.at[1, 'col 2'] = np.NaN
df.at[8, 'col 1'] = np.NaN
df.loc[2:4, ['col 3']] = np.NaN

color = df.isna()
color.replace({True: 'red', False: 'white'}, inplace=True)
list_color = color.values.tolist()

fig, ax = plt.subplots(figsize=(12, 4))
ax.axis('tight')
ax.axis('off')

the_table = ax.table(cellText=df.values, colLabels=df.columns, loc='center', cellColours=list_color)

pp = PdfPages("foo.pdf")
pp.savefig(fig)
pp.close()

enter image description here

Python相关问答推荐

Python中MongoDB的BSON时间戳

LAB中的增强数组

如何在图片中找到这个化学测试条?OpenCV精明边缘检测不会绘制边界框

Polars LazyFrame在收集后未返回指定的模式顺序

试图找到Python方法来部分填充numpy数组

滚动和,句号来自Pandas列

类型错误:输入类型不支持ufuncisnan-在执行Mann-Whitney U测试时[SOLVED]

将输入管道传输到正在运行的Python脚本中

如何使用LangChain和AzureOpenAI在Python中解决AttribeHelp和BadPressMessage错误?

如何将一个动态分配的C数组转换为Numpy数组,并在C扩展模块中返回给Python

Godot:需要碰撞的对象的AdditionerBody2D或Area2D以及queue_free?

我的字符串搜索算法的平均时间复杂度和最坏时间复杂度是多少?

Tkinter菜单自发添加额外项目

在Python中使用if else或使用regex将二进制数据如111转换为001""

Maya Python脚本将纹理应用于所有对象,而不是选定对象

在不同的帧B中判断帧A中的子字符串,每个帧的大小不同

找到相对于列表索引的当前最大值列表""

关于两个表达式的区别

如何在验证文本列表时使正则表达式无序?

使用xlsxWriter在EXCEL中为数据帧的各行上色