python - 尝试减去两个值时,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 循环正确。
谁能帮我?
解决方案
有一种方法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]