Pandas merge дает keyerror

У меня есть 2 Dataframes 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 Dataframes, как это (так как мне нужен только 1 столбец из первой таблицы и 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
0
7 218
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ваш левый фрейм данных в вашем операторе слияния - df_general[['Agency']]. Это означает, что это будет фрейм данных с одним столбцом (только со столбцом Agency), но вы пытаетесь объединить его с одним столбцом ProjectNumber. Итак, я думаю, вы хотите включить и этот столбец, чтобы этот столбец существовал в обоих фреймах:

intersect = df_general[['ProjectNumber','Agency']].merge(df_award[['ProjectNumber', 'awarded_to']], on='ProjectNumber', how='left')
Ответ принят как подходящий

Похоже, у вас почти все правильно. Ключ должен быть как с левой, так и с правой стороны. Похоже, вы не передаете ProjectNumber во фрейме данных df_general. Возможно, лучше сработало бы следующее:

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

Затем вы можете просто отбросить повторяющийся ключевой столбец на фреймворке intersect.

В качестве альтернативы, если ключевые столбцы названы по-разному, вы должны указать left_on= и right_on=, при этом убедитесь, что левый и правый фреймы данных содержат ключ.

Другие вопросы по теме