【发布时间】:2020-08-03 13:32:47
【问题描述】:
我必须使用 Python 呈现两个百分比之间的差异。例如,40% 和 41.234% 之间的差异是 1.234 个百分点,即 1.234 个百分点。
如果我想将增量格式化为百分比,我会使用格式说明符{:.0%}:
increase = 0.01234
"{:+.3%} ".format(increase)
>>> "+1.234 %"
我在寻找什么
将% 替换为pp 的格式说明符,如下所示:
"{some_specifier} ".format(increase)
>>> "+1.234 pp"
我不想要的东西
我知道我可以使用这样的 f 字符串
f"{increase * 100:+.3f} pp"
>>> "+1.234 pp"
但我特意寻找可以与.format() 一起使用的格式说明符。
编辑
我意识到一点背景可能在这里有用。在我的实现中,increase 可以表示正常的浮点数、整数、百分比或百分点。为了获得正确的表示,我使用了一个看起来像这样的可变格式映射:
format_mapping = {
"var_x": "{:,.0f}", # for large numbers
"var_y": "{:+.3f}", # for small numbers
"var_z": "{:.4%}", # for percentages
}
变量名代表 pandas 数据框 my_data 的列名,以便我可以将格式应用于这些列,以便进行报告
for var in my_data.columns:
fmt = format_mapping[var]
my_data[var] = pd.Series(fmt.format(value) for value in my_data[var])
【问题讨论】:
-
您是否考虑过只做
"{:+.3%} ".format(increase).replace('%', 'pp')而不是尝试使 f-string 输出 'pp' 本身? -
这是个好主意。不过,我有一种情况,我有不同的变量类型(百分比、浮点数、整数)可以用作
increase的输入。我目前使用变量类型和格式说明符之间的字典映射来获取我正在寻找的格式。然后可以直接使用格式说明符,而无需实际更改"{format_specifier}.format(value)"语法
标签: python