如何避免我的python代码将值舍入到1位小数p

2024-05-16 14:00:15 发布

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

我正在尝试在我的pandas数据框中创建一个新列,它是对数据集中的其他列执行的基本数学公式的结果。现在的问题是,列中捕获的值被极大地向上舍入,并且不代表真正的值。你知道吗

2.5364不应四舍五入为2.5,3.775不应四舍五入为3.8

我试图将分母声明为浮点数,以欺骗系统提供类似的值。ie 12/3.00应该是4.00,但仍然返回4.0。你知道吗

这是我目前正在做的:

normal_load = 3
df['FirstPart_GPA'] = ((df[first_part].sum(axis = 1, skipna = True))/(normal_load*5.00))

我将skipna设置为true,因为有时一列可能没有任何值,但我仍然希望能够计算GPA,而不让系统抛出任何错误,因为任何数字加上NAN都会得到NAN。你知道吗

我使用的数据帧如下所示:

dict = {'course1': [15,12],
        'course2': [9,6],
        'course3': [12,15],
        'course4': [15,3],
        'course5': [15,9],
        'course6': [9,12]}

df = pd.DataFrame(dict)

注意,我的dataframe包含一些空值,因为有些课程是选修课。请帮帮我。我没有主意了。你知道吗


Tags: 数据声明pandasdf系统load代表nan
3条回答

天哪!我现在明白问题所在了。我只是把我的文件扔进excel做了计算,结果证明代码是好的。很抱歉我占用了你的时间,同时我也很感激你的迅速反应。你知道吗

我一直以为GPA会有很多小数,但代码使用了5分的评分系统,这意味着如果一个学生在一门课程中有一个a,课程负荷为3,她会得到15分。你知道吗

一个学生每学期必须修5门课。所有5门课程都有3门课。这意味着所有5门课程=15门。你知道吗

因此,因为一个学生可能拥有的值大多是3的倍数(0,3,6,9,12,15),当我们把他所有的5门课程的所有单元的总和除以15,3总是会通过它,即3+12+12+3+9/15=13/5

5是如此的无问题,而且它不会以额外的小数溢出,不像10/3,它不断地在小数部分给我递归的3,5是合作的。因此13/5=2.6

可以添加如下所示的浮点格式:

result= "%0.2f" % your_calc_result

使用此代码的示例:

dict = {'course1': [15,12],
        'course2': [9,6],
        'course3': [12,15],
        'course4': [15,3],
        'course5': [15,9],
        'course6': [9,12]}
df = pd.DataFrame(dict)
normal_load = 3.0
result=[]
for i in range(len(df.index)):
    result.append("%0.2f" % (float(df.loc[i].sum())/(normal_load*5.00)))
df['FirstPart_GPA']=result

输出:

   course1  course2  course3  course4  course5  course6 FirstPart_GPA
0       15        9       12       15       15        9          5.00
1       12        6       15        3        9       12          3.80

您尚未在代码中定义第一个\u part变量,因此我将假设它是dataframe列的某个子集,例如:

first_part=['course1', 'course2', 'course3']

数据帧中的所有数字都是3的整数倍,因此,当您将其中任何一个数字相加并除以15时,将始终得到小数点后不超过1位的十进制数。你的值不是四舍五入的,而是精确的。你知道吗

要显示小数点后有两位数字的数字,请添加一行:

pd.options.display.float_format = '{:,.2f}'.format

现在

df['FirstPart_GPA'] = ((df[first_part].sum(axis = 1, skipna = True))/(normal_load*5.00))
df
course1 course2 course3 course4 course5 course6 FirstPart_GPA
0   15  9   12  15  15  9   2.40
1   12  6   15  3   9   12  2.20

相关问题 更多 >