pandas 在写入PDF文件(PdfPages)时突出显示具有NaN(matplotlib)的数据框?

ddrv8njm  于 2023-03-28  发布在  其他
关注(0)|答案(1)|浏览(140)

我想做两件事:
1.用红色突出显示 Dataframe 的“NaN”值。
1.将数据框添加到PDF文件。
我能够在PDF页面中成功显示dataframe,但是NaN值在PDF中没有用红色反映出来。
我已经尝试了以下代码:

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)

我也尝试过使用seaborn的其他一些东西:

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

我想,我需要在ax.table中添加一个选项来突出显示dataframe。

tvmytwxo

tvmytwxo1#

这可以通过在ax.table函数中为cellColors创建一个颜色列表来实现。为此,我们创建一个逻辑 Dataframe color = df.isna(),用我们需要的颜色替换接收到的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()

相关问题