如何在Pandas数据帧中以百分比而不是字符串的形式存储值

2024-05-07 12:49:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用pandas创建数据帧,然后导入PowerBI进行可视化。数据框中的一列是百分比计算。在

我对计算数值没有问题。但是,这些值在末尾没有“%”符号,例如55.2%,而不是55.2%。在

我的初始数据帧示例:

df1 = 

year_per    pass    fail    total
---------------------------------
201901      300     700     1000
201902      400     600     1000
201903      200     800     1000
201904      500     500     1000

然后计算两个新列,以说明每列所代表的合计百分比,这样新的数据帧为:

^{pr2}$

这些新的%列是使用以下代码创建的:

df2['pass%'] = round((df1['pass'] / df1['total']) * 100,1)

这很管用。PowerBI很乐意使用这些值。不过,为了清楚起见,我希望它在末尾显示“%”符号。因此,我将计算代码更新为:

df2['pass%'] = (round((df1['pass'] / df1['total']) * 100,1).astype(str))+'%'

这也会在视觉上产生正确的输出。但是,由于值现在是字符串,PowerBI无法处理新值,因为可视化需要的是数字格式,而不是字符串。在

我还尝试使用以下格式(如这里所述:how to show Percentage in python):

{0:.1f}%".format()

即:

df2['pass%'] = '{0:.1f}%'.format(round((df1['pass'] / df1['total']) * 100,1))

但得到的错误是:

'TypeError: unsupported format string passed to Series.__format__'

因此,我想知道是否有一种方法可以将值存储为数字格式,在数字后面加上%符号?否则我只能接受没有%符号的值。在


Tags: 数据代码format可视化格式符号数字pass
1条回答
网友
1楼 · 发布于 2024-05-07 12:49:07

这是因为您将一个序列传递给round,它需要一个标量数字参数,但得到的却是一个序列(同样,format也会对序列有问题)。您可以改为:

df2['pass%'] = (df1['pass'] / df1['total']).map(lambda num: '{0:.1f}%'.format(round(num * 100, 1))

但是你知道,与你问题的标题不同,这当然会将百分比存储为一个字符串。在

相关问题 更多 >