为什么 Python 为除法返回 0.0?

问题描述

我正在尝试将数据集中的一列除以 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)

解决方法

您可以使用 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)
,

设置:

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(浮点数。)...列中的值以 '100.0' 开头,...除以 100,它应该返回 '1'如果是做楼层划分

该声明中有两件事

  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
        >>>
      
  2. 您期望从 dtype 浮点数和浮点数的 Pandas 系列之间的楼层划分得到整数结果 (should return '1')。两个操作数都是浮点数的算术运算不会返回整数。

    • 来自 Python 文档 6.1. Arithmetic conversions

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

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

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

    • 我很难找到特定的 Numpy 或 Pandas 文档。有关于这个概念的 SO Q&A,但它们也暗指我。