处理 NaN 的成对距离

Posted

技术标签:

【中文标题】处理 NaN 的成对距离【英文标题】:Pairwise Distance Dealing with NaNs 【发布时间】:2019-11-24 22:17:31 【问题描述】:

我有一个数据透视表,我想从中计算每天之间的成对距离矩阵。由于我的数据集包含 NaN 值,因此当我使用 sklearn 成对距离时,它会在我身上产生。

如果有办法克服这个问题,我喜欢吗?

数据透视表 X 是这样的:

 time   04:45:00    05:00:00   05:15:00
 date     
 01-01    61           NaN        44
 01-02    23            70         NaN

from sklearn.metrics.pairwise import pairwise_distances
pairwise_distances(X)

我遇到以下错误:

ValueError: Input conains NaN, infinity or a value too large for dtype('float64')

【问题讨论】:

【参考方案1】:

简单的解决方法是用一些估算值填充那些NaN 值。可以是0mean、沿行向前/向后填充值等。

试试这样的!

d = """ time   04:45:00    05:00:00   05:15:00
 date     
 01-01    61           NaN        44
 01-02    23            70        NaN
"""


import pandas as pd
from io import StringIO

df = pd.read_csv(StringIO(d), sep='\s+')
data = df.iloc[1:,1:].fillna(method='ffill', axis=1)
data
    04:45:00    05:00:00    05:15:00
1   61.0    61.0    44.0
2   23.0    70.0    70.0

现在申请pairwise_distances

from sklearn.metrics.pairwise import pairwise_distances
pairwise_distances(data)

# array([[ 0.        , 46.91481642],
#       [46.91481642,  0.        ]])

【讨论】:

感谢您的回复,我正在寻找一种方法来忽略 NaN 而不是归咎于它们... @amirhossein,您找到解决方案了吗?

以上是关于处理 NaN 的成对距离的主要内容,如果未能解决你的问题,请参考以下文章

计算大量 GPS 坐标之间的成对路由距离

python中最快的成对距离度量

自然语言处理向量表示PairSupCon:用于句子表示的成对监督对比学习

非常大的数据集中的成对距离

评估TensorFlow中多维输入之间的成对欧氏距离

数据框列中的字符串列表行之间的成对距离