Python 3.x 输入键错误

Python 3.x 输入键错误,python-3.x,pandas,dataframe,data-science,Python 3.x,Pandas,Dataframe,Data Science,我有两个数据帧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个数据帧(因为我只需要第一个表中的1列和

我有两个数据帧
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个数据帧(因为我只需要第一个表中的1列和第二个表中的2列)-

但我还是发现了一个关键错误-

---------------------------------------------------------------------------
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)

请帮忙。谢谢

合并语句中的左侧数据框是
df_general[['Agency']]
。这意味着它将是一个单列数据帧(只有列
机构
),但您正试图将其合并到列
项目编号
。所以我认为您也需要包括该列,以便该列在两个帧中都存在:

intersect = df_general[['ProjectNumber','Agency']].merge(df_award[['ProjectNumber', 'awarded_to']], on='ProjectNumber', how='left')

合并语句中的左数据框是
df_general[['Agency']]
。这意味着它将是一个单列数据帧(只有列
机构
),但您正试图将其合并到列
项目编号
。所以我认为您也需要包括该列,以便该列在两个帧中都存在:

intersect = df_general[['ProjectNumber','Agency']].merge(df_award[['ProjectNumber', 'awarded_to']], on='ProjectNumber', how='left')

看来你几乎什么都对了。钥匙需要在左右两侧。您似乎没有在
df_general
数据帧上传递
ProjectNumber
。也许以下方法更有效:

df_general[['Agency', 'ProjectNumber']].merge(df_award[['ProjectNumber', 'awarded_to']], on='ProjectNumber', how='left')
然后您可以简单地将复制键列放到
intersect
dataframe上


或者,如果键列的名称不同,您应该指定
left\u on=
right\u on=
,同时确保左侧和右侧数据帧都包含键。

看起来您几乎所有内容都是正确的。钥匙需要在左右两侧。您似乎没有在
df_general
数据帧上传递
ProjectNumber
。也许以下方法更有效:

df_general[['Agency', 'ProjectNumber']].merge(df_award[['ProjectNumber', 'awarded_to']], on='ProjectNumber', how='left')
然后您可以简单地将复制键列放到
intersect
dataframe上

或者,如果键列的名称不同,则应指定
left\u on=
right\u on=
,同时确保左侧和右侧数据帧都包含键