以该数字为例:
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
,但我不想失去精度。
答案 0 :(得分:1)
数据框中'data'
列的类型为numpy.float64
,即使Pandas仅将其报告为float64
也是如此。您可以通过以下方法向自己证明这一点:
df['data'].dtype.type is numpy.float64
,它将返回True
。另一种形式是:
type(df['data'].values[0]) is numpy.float64
,它也会返回True
。
显示上的任何差异都取决于SciView
解释代码的方式。