gpt4 book ai didi

python - 为什么 Pandas.DataFrame.iloc 转换为 numpy.float64 并四舍五入?

转载 作者:太空宇宙 更新时间:2023-11-04 04:24:32 25 4
gpt4 key购买 nike

以这个数字为例:

1.64847910404205

如果我创建一个包含一行和此值的 Pandas DataFrame:

df = pd.DataFrame([{'id': 77, 'data': 1.64847910404205}])

然后遍历行(好吧......“行”)并检查:

for index, row in df.iterrows():
if index > 0:
previous_row = df.iloc[index]

当然,上面的内容很奇怪:为什么我要遍历行只是为了从 DF 中提取同一行?算了吧;我删除了 -1 来说明。

现在,如果我使用 SciView(IntelliJ 的一部分)和 data 选项卡分别检查行,我会得到:

row
data: 1.64847910404205

previous_row
data: 1.64847910404

请注意,previous_row 已四舍五入。这是因为出于某种原因它们是不同的数据类型......

row: 
type(row) #float64

previous_row:
type(previous_row) #numpy.float64

我很想知道:为什么 iloc 会转换为 numpy.float64 以及如何防止它这样做?

我需要与稍后进行峰值信噪比 (PSNR) 计算时相同的精度。当然,我可以将 float 转换为 numpy.float64,但我不想失去精度。

最佳答案

数据框中 'data' 列的类型是 numpy.float64,即使 Pandas 仅将其报告为 float64。您可以通过以下方式向自己证明这一点:

df['data'].dtype.type is numpy.float64

这将返回 True。另一种形式是:

type(df['data'].values[0]) is numpy.float64

这也将返回 True

显示上的任何差异取决于 SciView 解释您的代码的方式。

关于python - 为什么 Pandas.DataFrame.iloc 转换为 numpy.float64 并四舍五入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53751763/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com