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 中的每个单元格。如果formatter为None,则使用默认的格式化函数。如果为 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_rep和precision与默认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_rep或precision规范。>>> (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与 HTMLescape和na_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/<div></div>"><div></div></a></td> <td .. ><a href="a.com/"A&B"">"A&B"</a></td> <td .. >NA</td> ...
在“latex”模式下将
formatter与escape一起使用。>>> 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)