【问题标题】:Pandas increase data precisionPandas 提高数据精度
【发布时间】:2021-07-26 21:01:28
【问题描述】:

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

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

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

这些列是 float64 格式。

如何显示更高的精度?

这里是我正在运行的代码供参考:

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()

【问题讨论】:

标签: python pandas dataframe scipy


【解决方案1】:

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

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

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

如果squareform 的结果仍然是float64 dtype,您应该将您的scipy 库update 更新到更高版本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-17
    • 1970-01-01
    • 2022-01-25
    • 2021-12-09
    • 2014-09-04
    • 2020-12-17
    相关资源
    最近更新 更多