我正在尝试从此处运行示例代码:
https://www.dataquest.io/blog/k-nearest-neighbors-in-python/
此处提供了示例数据:
https://www.dropbox.com/s/b3nv38jjo5dxcl6/nba_2013.csv?dl=0
我在这里遇到错误:
lebron_normalized = nba_normalized [nba [“ player”] ==“勒布朗·詹姆斯”]
错误:KeyError:'玩家'
当我查看数据集时,我发现nba_normalized
没有一个名为player
的字段,因为nba_normalized
仅是数字。如何找到Lebron James的归一化向量,并在此基础上找到euclidean_distances
?
答案 0 :(得分:1)
我运行了代码,它对我有用(由于熊猫版本较新,不得不将sort更改为sort_values)。
以下陈述不正确,如果是,那么您做错了事。
nba_normalized
仅是数字
当您这样做:
nba_normalized = (nba_numeric - nba_numeric.mean()) / nba_numeric.std()
nba_numeric是一个熊猫数据框。在对数据帧进行操作时,我们将对数据的所有列的标量进行减去和除法。
答案 1 :(得分:1)
是的,我敢肯定,由于KeyError,OP有时会改写nba
。
稍微说明一下,掩码操作不是合并,而是对数据帧的子集执行的True / False向量,因此您不必担心联接键,而对确保数据帧相似更感兴趣在构图上。
import pandas as pd
nba = pd.read_csv('nba_2013.csv')
distance_columns = ['age', 'g', 'gs', 'mp', 'fg', 'fga', 'fg.', 'x3p', 'x3pa', 'x3p.', 'x2p', 'x2pa', 'x2p.', 'efg.', 'ft', 'fta', 'ft.', 'orb', 'drb', 'trb', 'ast', 'stl', 'blk', 'tov', 'pf', 'pts']
nba_numeric = nba[distance_columns]
nba_normalized = (nba_numeric - nba.mean()) / nba_numeric.std()
def lebron(x):
if "lebron" in x.lower():
return True
return False
lebron_normalized = nba_normalized[nba.player.isin(set(filter(lebron, nba.player)))]
# Heh
print(lebron_normalized.head(4))