我有2个数据框df_general
和df_award
,它们共享一个称为ProjectNumber
的列。我要合并它们。
我尝试使用dropna()删除所有行,但确实删除了它们-
df_award['ProjectNumber'].replace(' ', np.nan, inplace=True)
df_award.dropna(subset=['ProjectNumber'], inplace=True)
df_award.head()
然后像这样合并2个数据框(因为我只希望第一个表中的一列和第二个表中的2列)-
intersect = df_general[['Agency']].merge(df_award[['ProjectNumber', 'awarded_to']], on='ProjectNumber', how='left')
但是我仍然收到KeyError-
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
~\Anaconda3\lib\site-packages\pandas\core\indexes\base.py in get_loc(self, key, method, tolerance)
2441 try:
-> 2442 return self._engine.get_loc(key)
2443 except KeyError:
pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_loc()
pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_loc()
pandas\_libs\hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()
pandas\_libs\hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()
KeyError: 'ProjectNumber'
During handling of the above exception, another exception occurred:
KeyError Traceback (most recent call last)
请帮助。谢谢!
答案 0 :(得分:1)
您的merge语句中的左侧数据框为df_general[['Agency']]
。这意味着它将是一个单列数据帧(仅包含列Agency
),但是您正在尝试将其合并到列ProjectNumber
中。因此,我认为您也希望包括该列,以便该列在两个框架中都存在:
intersect = df_general[['ProjectNumber','Agency']].merge(df_award[['ProjectNumber', 'awarded_to']], on='ProjectNumber', how='left')
答案 1 :(得分:1)
看来您几乎一切都正确。密钥必须同时在左侧和右侧。看来您没有在ProjectNumber
数据帧上传递df_general
。也许以下方法会更好:
df_general[['Agency', 'ProjectNumber']].merge(df_award[['ProjectNumber', 'awarded_to']], on='ProjectNumber', how='left')
然后,您只需将重复的键列放在intersect
数据框中。
或者,如果键列的名称不同,则应指定left_on=
和right_on=
,同时确保左右数据帧均包含键。