为啥 Python 返回 0.0 进行除法? [复制]

Posted

技术标签:

【中文标题】为啥 Python 返回 0.0 进行除法? [复制]【英文标题】:Why is Python Returning 0.0 for division? [duplicate]为什么 Python 返回 0.0 进行除法? [复制] 【发布时间】:2021-04-01 06:01:32 【问题描述】:

我试图将我的数据集中的一列除以 100,以便将其转换为百分比(即 99% = .99。)但是,当我除以 100 时,它会为列中的所有值返回零。我理解“ / ”在划分两个整数时返回地板除法。但是,我将列变成了浮点数,并将列除以 100.0(浮点数。)另外,列中的很多值一开始都是 '100.0',所以当我除以 100 时,它应该返回 ' 1' 如果它正在做楼层划分。 if 语句的“+ .04”部分用于说明报告中的错误。我的 for 循环有问题吗?我附上了下面的代码。

    import pandas as pd
    import numpy as np
    
    data = pd.read_csv('Lakeshore Variance.csv')
    Percent = data['Percent at Cutoff'].astype(float)
    
    for i in Percent:
    if i < 96:
         Percent = (Percent/100.0) + .04
    else:
         Percent = (Percent/100.0)

【问题讨论】:

“我明白” / “在两个整数相除时返回地板除法”不,不,它没有。 python 3: // 返回楼层划分。 / 是除法 您的问题是什么?您只是在问为什么它会这样吗? 【参考方案1】:

您可以使用 apply 方法来更新 pandas 中的列,而不是使用循环。

我投票结束这个问题,因为它已经在 Python: Pandas Dataframe how to multiply entire column with a scalar 中得到回答

data['Percent at Cutoff'] = data['Percent at Cutoff'].apply(lambda x: x / 100)

【讨论】:

【参考方案2】:

设置:

import pandas as pd
import numpy as np
from numpy.random import default_rng
rng = default_rng()

df = pd.DataFrame(rng.integers(100,200, (5,))) 
>>> df
     0
0  150
1  171
2  188
3  140
4  180

我理解“/”在除以两个整数时返回地板除法。

否 - // 是楼层除法运算符

>>> df / 100
      0
0  1.50
1  1.71
2  1.88
3  1.40
4  1.80
>>> df // 100
   0
0  1
1  1
2  1
3  1
4  1
>>>

我将列变成浮点数,并将列除以 100.0 (float.) ... 列中的值一开始是 '100.0',... 除以 100,它应该返回 '1'如果是做楼层划分

该声明中有两点

    你不是在做楼层划分

      >>> df.astype(float) / 100  
            0
      0  1.50
      1  1.71
      2  1.88
      3  1.40
      4  1.80
      >>> df.astype(float) // 100
           0
      0  1.0
      1  1.0
      2  1.0
      3  1.0
      4  1.0
      >>>
    

    您希望在 Pandas 系列的 dtype 浮点数和浮点数之间进行地板除法的整数结果 (should return '1')。两个操作数都是浮点数的算术运算不会返回整数。

    来自 Python 文档6.1. Arithmetic conversions

    当下面对算术运算符的描述使用短语“数字参数转换为通用类型”时,这意味着内置类型的运算符实现如下:

    ...,如果任一参数为浮点数,则将另一个转换为浮点数; 否则,两者都必须是整数,不需要转换。
    6.7. Binary arithmetic operations

    /(除法)和 //(下除法)运算符产生其参数的商。数字参数首先转换为通用类型。整数除法产生浮点数,而整数的下除法产生整数;结果是对结果应用“floor”函数的数学除法。

    我很难找到 Numpy 或 Pandas 的特定文档。有一些关于这个概念的问答,但他们也暗指我。

【讨论】:

以上是关于为啥 Python 返回 0.0 进行除法? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥这个计算(除法)会返回错误的结果?

Python:将空字符串与 False 进行比较是 False,为啥?

Numpy/Python 中基本数学运算的速度:为啥整数除法最慢?

为啥将浮点数除以整数返回 0.0?

为啥整数除以零 1/0 会出错但浮点数 1/0.0 返回“Inf”?

为啥Firebird在除法时会截断小数位?