Pandas提高数据精度

2024-05-16 01:02:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据框,其中行表示对象,列表示对象特征

我试图计算对象的余弦相似性,当我运行代码时,它似乎工作得很好,但是当我对距离进行排序时,壁橱对象的距离都是0,这只有在它们的向量相同时才可能,但事实并非如此

I,查看数据输出,似乎任何精度超过E-16的数字都会变成0(在终端打印输出和csv文件输出中都显示为0)

这些列是64格式的

如何显示更高的精度

以下是我正在运行的代码供参考:

import pandas as pd
from scipy.spatial.distance import pdist
from scipy.spatial.distance import squareform

dfe = pd.read_csv('file.csv')

dfe = dfe.set_index('object')

dfe = dfe.fillna(dfe.mean())

pairwise = pd.DataFrame(squareform(pdist(dfe, metric='cosine')),columns = dfe.index,index = dfe.index)

long_form = pairwise.unstack()

long_form.index.rename(['object_1', 'object_2'], inplace=True)
long_form = long_form.to_frame('distance').reset_index()

Tags: csv数据对象代码fromimportform距离
1条回答
网友
1楼 · 发布于 2024-05-16 01:02:19

如果您的意思是当您尝试获取两个元素之间的差异时得到0,当元素之间的差异小于1e-16时得到0,那么这就是float64精度限制。参见示例print(1+1e-16)。有关这方面的信息可以使用numpy.finfo(numpy.float)获得

您应该尝试使用更高精度的数据类型。 例如:

dfe =  pd.read_csv('file.csv').astype(numpy.float128)

如果squareform的结果仍然是float64数据类型,则应update将scipy库更新到更高版本

相关问题 更多 >