ПАНДЫ MERGE дают KeyError - PullRequest
       11

ПАНДЫ MERGE дают KeyError

0 голосов
/ 26 октября 2018

У меня есть 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 кадра данных примерно так (так как я хочу только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)

Пожалуйста, помогите.Спасибо!

Ответы [ 2 ]

0 голосов
/ 26 октября 2018

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

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

Тогда вы можете просто отбросить столбец дубликатов ключа на intersect фрейме данных.

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

0 голосов
/ 26 октября 2018

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

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