首页 > 解决方案 > 尝试减去两个值时,Pandas 上的 For 循环返回所有值的 NaN?

问题描述

我正在尝试使用曼哈顿距离手动计算 k-3 个最近邻居。

我有一个名为的数据框data和一个名为query. 我需要能够sum(abs(query-data))data.

到目前为止,我已经编写了一个这样的 for 循环:

 numeric_columns = data.columns[data.dtypes == np.number]

for rows in data:
    print(query[numeric_columns] - data[numeric_columns])

data这将返回原始长度为16、16 倍的所有列名称,其值为 NaN 。我对编写循环很陌生,我真的不明白我在这里做错了什么。我也希望能够返回距离和索引,但我认为我应该首先尝试让这个 for 循环正确。

谁能帮我?

标签: pythonpandasfor-loopknn

解决方案


有一种方法sub用于减去数据帧。减去数据帧 pandas 时,您可以在此处了解更多NaN 信息,并在此处https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.sub.html了解更多信息。循环是怎么回事。您只想减去数字列,因此您需要进行if检查。然后循环应该是这样的:

for rows in data:
    if data[rows].dtypes == np.number:
        t = query[row].sub(data[row], fill_value=0)
        print(t)

使用这样的循环,您不需要这部分numeric_columns = data.columns[data.dtypes == np.number]


推荐阅读