为啥 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'
)。两个操作数都是浮点数的算术运算不会返回整数。
6.7. Binary arithmetic operations当下面对算术运算符的描述使用短语“数字参数转换为通用类型”时,这意味着内置类型的运算符实现如下:
...,如果任一参数为浮点数,则将另一个转换为浮点数; 否则,两者都必须是整数,不需要转换。
我很难找到 Numpy 或 Pandas 的特定文档。有一些关于这个概念的问答,但他们也暗指我。/(除法)和 //(下除法)运算符产生其参数的商。数字参数首先转换为通用类型。整数除法产生浮点数,而整数的下除法产生整数;结果是对结果应用“floor”函数的数学除法。
【讨论】:
以上是关于为啥 Python 返回 0.0 进行除法? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
Python:将空字符串与 False 进行比较是 False,为啥?
Numpy/Python 中基本数学运算的速度:为啥整数除法最慢?