如何合并两个没有通用ID的数据帧?

时间:2019-05-31 18:40:00

标签: python python-3.x dataframe

我正在尝试从此处运行示例代码:

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

2 个答案:

答案 0 :(得分:1)

enter image description here我运行了代码,它对我有用(由于熊猫版本较新,不得不将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))