Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中设置百分比差异的格式?_Python - Fatal编程技术网

如何在Python中设置百分比差异的格式?

如何在Python中设置百分比差异的格式?,python,Python,我必须使用Python来表示两个百分比之间的差异。例如,40%和41.234%之间的差异为1.234个百分点,即1.234个百分点 如果我想将增加设置为百分比格式,我将使用格式说明符{.0%}: 我在找什么 用pp替换%的格式说明符,如下所示: "{some_specifier} ".format(increase) >>> "+1.234 pp" 我不是在找什么 我知道我可以像这样使用f字符串 f"{increase * 1

我必须使用Python来表示两个百分比之间的差异。例如,40%和41.234%之间的差异为1.234个百分点,即1.234个百分点

如果我想将增加设置为百分比格式,我将使用格式说明符{.0%}:

我在找什么 用pp替换%的格式说明符,如下所示:

"{some_specifier} ".format(increase)
>>> "+1.234 pp"
我不是在找什么 我知道我可以像这样使用f字符串

f"{increase * 100:+.3f} pp"
>>> "+1.234 pp"
但是我正在寻找一个可以与.format一起使用的格式说明符

编辑 我意识到一点背景知识在这里可能有用。在我的实现中,增加可以表示正常的浮点、整数、百分比或百分点。为了获得正确的表示,我使用了一个变量格式映射,它看起来像:

format_mapping = {
    "var_x": "{:,.0f}",    # for large numbers
    "var_y": "{:+.3f}",    # for small numbers
    "var_z": "{:.4%}",     # for percentages
}
变量名表示pandas dataframe my_数据的列名,这样我就可以对这些列应用格式,以便进行报告

for var in my_data.columns:
    fmt = format_mapping[var]
    my_data[var] = pd.Series(fmt.format(value) for value in my_data[var])

您可以使用以下选项:

increase = 0.01234

print("{:+.4} {}".format(increase*100, "pp"))
结果:

+1.234 pp

您可以使用以下选项:

increase = 0.01234

print("{:+.4} {}".format(increase*100, "pp"))
结果:

+1.234 pp

也许可以对Format类进行处理和子类化,但在这种情况下,我认为只编写函数来处理它可能更容易:

def pct(num, digits=0):
    return '{:+.{}} pp'.format(num * 100, digits)

...

f"{pct(increase, 4)}"
# '+1.234 pp'

然后,如果需要,您可以将所有这些函数放在它们自己的文件中,并通过在f-string中调用它们来调用它们。

您可能可以对Format类进行处理和子类化,但在这种情况下,我认为只编写函数来处理它可能更容易:

def pct(num, digits=0):
    return '{:+.{}} pp'.format(num * 100, digits)

...

f"{pct(increase, 4)}"
# '+1.234 pp'

然后,如果需要,您可以将所有这些函数放在它们自己的文件中,并通过在f字符串中调用它们来调用它们。

您可以声明自定义格式化程序并通过重写方法将%替换为pp:

用法:

print(MyFormatter().format("%: {0:+.3%}; pp: {0:+.3p}", 0.01234))

注意:在python 3中,您可以不带参数地使用super。

您可以声明自定义格式化程序并通过重写方法将%替换为pp:

用法:

print(MyFormatter().format("%: {0:+.3%}; pp: {0:+.3p}", 0.01234))

注意:在python 3中,您可以不带参数地使用super。

您是否考虑过只执行{:+.3%}.formatEngress.replace“%”,而不是尝试使f字符串输出本身为“pp”?这是个好主意。我有一种情况,虽然,我有不同的变量类型百分比,浮点数,整数,可以作为输入增加。目前,我使用变量类型和格式说明符之间的字典映射来获取我要查找的格式。格式说明符可以在不改变{format_说明符}.formatvalue语法的情况下使用。您是否考虑过只做{:+.3%}.formatincrease.replace“%”,'pp”而不是尝试使f字符串输出本身为'pp'呢?这是个好主意。我有一种情况,虽然,我有不同的变量类型百分比,浮点数,整数,可以作为输入增加。目前,我使用变量类型和格式说明符之间的字典映射来获取我要查找的格式。格式说明符可以直接使用,而不需要实际更改{format_说明符}。它们需要相同的输出,但输入为0.01234,而不是1.234。您可以方便地更改increase@GreenCloakGuy我编辑了答案以获得相同的输入。这不是OP要求的。它们需要相同的输出,但输入为0.01234,而不是1.234。您可以方便地更改increase@GreenCloakGuy我编辑了答案以获得相同的输入。