У меня есть 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)
Пожалуйста помоги. Спасибо!
Ваш левый фрейм данных в вашем операторе слияния - 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=
, при этом убедитесь, что левый и правый фреймы данных содержат ключ.