pandas.io.formats.style.Styler.format#

Styler.format(formatter=None, subset=None, na_rep=None, precision=None, decimal='.', thousands=None, escape=None, hyperlinks=None)[源代码]#

设置单元格的文本显示值格式。

Parameters:
formatterstr、callable、dict 或 None。

定义值如何显示的 object。请参阅 notes。

subset标签、类数组、IndexSlice、可选

DataFrame.loc[<subset>] 的有效二维输入,或者,在输入为一维或单个键的情况下,为 DataFrame.loc[:, <subset>],其中列优先,用于在应用函数 之前 限制 data

na_repbool, default False

缺失值的表示。如果 na_rep 为 None,则不应用特殊格式。

precisionint, optional

用于显示的浮点精度,如果未使用指定的 formatter 确定的话。

在 1.3.0 版本加入.

decimalstr,默认为 “.”。

用作浮点数、复数和整数小数分隔符的字符。

在 1.3.0 版本加入.

thousandsstr, optional, default None

用作浮点数、复数和整数千位分隔符的字符。

在 1.3.0 版本加入.

escapebool, default False

使用 ‘html’ 将单元格显示字符串中的字符 &<>'" 替换为 HTML 安全序列。使用 ‘latex’ 将单元格显示字符串中的字符 &%$#_{}~^\ 替换为 LaTeX 安全序列。使用 ‘latex-math’ 的替换方式与 ‘latex’ 模式相同,但数学子字符串将被两个字符 $ 包围,或者以字符 \( 开头并以 \) 结尾。转义发生在 formatter 之前。

在 1.3.0 版本加入.

超链接{“html”, “latex”},可选。

将包含 https://http://ftp:// 或 www. 的字符串模式转换为 HTML <a> 标签作为可点击的 URL 超链接(如果为 “html”),或转换为 LaTeX href 命令(如果为 “latex”)。

在 1.4.0 版本加入.

Returns:
Styler

参见

Styler.format_index

格式化索引标签的文本显示值。

Notes

此方法将一个格式化函数 formatter 分配给 DataFrame 中的每个单元格。如果 formatterNone,则使用默认的格式化函数。如果为 callable,则该函数应将数据值作为输入并返回可显示的表示,例如字符串。如果 formatter 是字符串,则假定它是一个有效的 Python 格式规范,并被包装成 callable,如 string.format(x)。如果给出一个 dict,键应对应于列名,值应该是字符串或 callable,如上所述。

默认格式化函数目前使用 pandas 显示精度来表示浮点数和复数,除非在此使用 precision 参数。默认格式化函数不调整缺失值的表示,除非使用了 na_rep 参数。

subset 参数定义了将格式化函数应用于哪个区域。如果 formatter 参数以字典形式给出,但未包含 subset 中的所有列,则这些列将应用默认格式化器。formatter 字典中被排除在 subset 之外的任何列都将被忽略。

使用 formatter 字符串时,dtypes 必须兼容,否则将引发 ValueError

实例化 Styler 时,可以通过设置 pandas.options 来应用默认格式:

  • styler.format.formatter: 默认为 None。

  • styler.format.na_rep: 默认为 None。

  • styler.format.precision: 默认为 6。

  • styler.format.decimal: 默认为“.”。

  • styler.format.thousands: 默认为 None。

  • styler.format.escape: 默认为 None。

警告

使用输出格式 Styler.to_excel 时会忽略 Styler.format,因为 Excel 和 Python 具有根本不同的格式结构。但是,可以使用 number-format 伪 CSS 属性强制生成 Excel 可接受的格式。请参阅示例。

Examples

na_repprecision 与默认 formatter 一起使用

>>> df = pd.DataFrame([[np.nan, 1.0, 'A'], [2.0, np.nan, 3.0]])
>>> df.style.format(na_rep='MISS', precision=3)  
        0       1       2
0    MISS   1.000       A
1   2.000    MISS   3.000

在一致的列 dtypes 上使用 formatter 规范

>>> df.style.format('{:.2f}', na_rep='MISS', subset=[0,1])  
        0      1          2
0    MISS   1.00          A
1    2.00   MISS   3.000000

为未指定的列使用默认 formatter

>>> df.style.format({0: '{:.2f}', 1: {:.1f}'}, na_rep='MISS', precision=1)
...  
         0      1     2
0    MISS   £ 1.0     A
1    2.00    MISS   3.0

在默认 formatter 下有多个 na_repprecision 规范。

>>> (df.style.format(na_rep='MISS', precision=1, subset=[0])
...     .format(na_rep='PASS', precision=2, subset=[1, 2]))  
        0      1      2
0    MISS   1.00      A
1     2.0   PASS   3.00

使用可调用 formatter 函数。

>>> func = lambda s: 'STRING' if isinstance(s, str) else 'FLOAT'
>>> df.style.format({0: '{:.1f}', 2: func}, precision=4, na_rep='MISS')
...  
        0        1        2
0    MISS   1.0000   STRING
1     2.0     MISS    FLOAT

formatter 与 HTML escapena_rep 一起使用。

>>> df = pd.DataFrame([['<div></div>', '"A&B"', None]])
>>> s = df.style.format(
...     '<a href="a.com/{0}">{0}</a>', escape="html", na_rep="NA"
...     )
>>> s.to_html()  
...
<td .. ><a href="a.com/&lt;div&gt;&lt;/div&gt;">&lt;div&gt;&lt;/div&gt;</a></td>
<td .. ><a href="a.com/&#34;A&amp;B&#34;">&#34;A&amp;B&#34;</a></td>
<td .. >NA</td>
...

在“latex”模式下将 formatterescape 一起使用。

>>> df = pd.DataFrame([["123"], ["~ ^"], ["$%#"]])
>>> df.style.format("\\textbf{{{}}}", escape="latex").to_latex()
...  
\begin{tabular}{ll}
 & 0 \\
0 & \textbf{123} \\
1 & \textbf{\textasciitilde \space \textasciicircum } \\
2 & \textbf{\$\%\#} \\
\end{tabular}

在“latex-math”模式下应用 escape。在下面的示例中,我们使用字符 $ 进入数学模式。

>>> df = pd.DataFrame([[r"$\sum_{i=1}^{10} a_i$ a~b $\alpha \
...     = \frac{\beta}{\zeta^2}$"], ["%#^ $ \$x^2 $"]])
>>> df.style.format(escape="latex-math").to_latex()
...  
\begin{tabular}{ll}
 & 0 \\
0 & $\sum_{i=1}^{10} a_i$ a\textasciitilde b $\alpha = \frac{\beta}{\zeta^2}$ \\
1 & \%\#\textasciicircum \space $ \$x^2 $ \\
\end{tabular}

我们可以使用字符 \( 进入数学模式,并使用字符 \) 关闭数学模式。

>>> df = pd.DataFrame([[r"\(\sum_{i=1}^{10} a_i\) a~b \(\alpha \
...     = \frac{\beta}{\zeta^2}\)"], ["%#^ \( \$x^2 \)"]])
>>> df.style.format(escape="latex-math").to_latex()
...  
\begin{tabular}{ll}
 & 0 \\
0 & \(\sum_{i=1}^{10} a_i\) a\textasciitilde b \(\alpha
= \frac{\beta}{\zeta^2}\) \\
1 & \%\#\textasciicircum \space \( \$x^2 \) \\
\end{tabular}

如果我们有一个 DataFrame 单元格包含两种数学公式简写方式的组合,则会应用带有 $ 符号的简写方式。

>>> df = pd.DataFrame([[r"\( x^2 \)  $x^2$"], \
...     [r"$\frac{\beta}{\zeta}$ \(\frac{\beta}{\zeta}\)"]])
>>> df.style.format(escape="latex-math").to_latex()
...  
\begin{tabular}{ll}
 & 0 \\
0 & \textbackslash ( x\textasciicircum 2 \textbackslash )  $x^2$ \\
1 & $\frac{\beta}{\zeta}$ \textbackslash (\textbackslash
frac\{\textbackslash beta\}\{\textbackslash zeta\}\textbackslash ) \\
\end{tabular}

Pandas 定义了一个 number-format 伪 CSS 属性,而不是 .format 方法来创建 to_excel 可接受的格式。请注意,分号是 CSS 受保护的字符,但在 Excel 的格式字符串中用作分隔符。在此处定义格式时,将分号替换为段分隔符(ASCII-245)。

>>> df = pd.DataFrame({"A": [1, 0, -1]})
>>> pseudo_css = "number-format: 0§[Red](0)§-§@;"
>>> filename = "formatted_file.xlsx"
>>> df.style.map(lambda v: pseudo_css).to_excel(filename) 
../../_images/format_excel_css.png