Ошибка ключа при выполнении pd.merge для строковых столбцов - PullRequest
0 голосов
/ 10 января 2020

У меня проблемы с выполнением слияния на двух фреймах данных.

Мои данные выглядят следующим образом: один содержит набор данных из 140 000 записей вхождений 121 различных видов индикаторов, например:

taxon
spp1
spp1
spp118
spp98
spp64
spp119

Другой содержит список из 121 вида с числовым значением c, например:

taxon  score
spp1   8
spp2   4
spp3   2
spp4   7
...
spp118 4
spp119 2
spp120 1
spp121 8

I w * sh для присоединения столбца оценок к набору данных с использованием столбца таксона в качестве объединения В поле для последующего анализа я предполагаю вывод, подобный следующему:

taxon  score
spp1   8
spp1   8
spp118 4
spp98  6
spp64  2
spp119 2

До сих пор я пробовал следующее:

data_in1 = pd.read_csv(r'occourence_list.csv', encoding='utf-8')
df1 = pd.DataFrame(data_in1)
df1['taxon'] = df1['taxon'].astype(str)
print(df1.head())
print(df1.dtypes)

data_in2 = pd.read_csv(r'score_list.csv', encoding='utf-8')
df2 = pd.DataFrame(data_in2)
df2['taxon'] = df2['taxon'].astype(str)
print(df2.head())
print(df2.dtypes)

result = pd.merge(df1,
                  df2[['iapa_score']],
                  left_on=['taxon'],
                  right_on=['taxon'],
                  how='outer')

print(result.head())

Однако это возвращает следующую ошибку:

Traceback (most recent call last):
  File "C:/Users/", line 19, in <module>
    how='outer')
  File "C:\Program Files\ArcGIS\Pro\bin\Python\envs\arcgispro-py3\lib\site-packages\pandas\core\reshape\merge.py", line 47, in merge
    validate=validate)
  File "C:\Program Files\ArcGIS\Pro\bin\Python\envs\arcgispro-py3\lib\site-packages\pandas\core\reshape\merge.py", line 529, in __init__
    self.join_names) = self._get_merge_keys()
  File "C:\Program Files\ArcGIS\Pro\bin\Python\envs\arcgispro-py3\lib\site-packages\pandas\core\reshape\merge.py", line 833, in _get_merge_keys
    right._get_label_or_level_values(rk))
  File "C:\Program Files\ArcGIS\Pro\bin\Python\envs\arcgispro-py3\lib\site-packages\pandas\core\generic.py", line 1706, in _get_label_or_level_values
    raise KeyError(key)
KeyError: 'taxon'

Ответы [ 2 ]

1 голос
/ 10 января 2020

По моему мнению, проблема заключается в этой строке df2[['iapa_score']], потому что столбец "таксон" больше не появляется, если вы ограничиваете свой фрейм данных столбцом "iapa_score", следовательно, "KeyError". Вам также следует использовать параметр how='left' в слиянии, поскольку вы хотите сохранить только строки из df1.

Я сам создал 2 кадра данных, чтобы воспроизвести вашу ситуацию, пожалуйста, посмотрите:

df1 = pd.DataFrame({'taxon': ["spp1", "spp1", "spp3"]})
df2 = pd.DataFrame({'taxon': ["spp1", "spp2", "spp3", "spp4"], 'score': ["8", "7", "6", "17"]})
result = pd.merge(df1,
                  df2,
                  left_on=['taxon'],
                  right_on=['taxon'],
                  how='left')
print(result)

df1:

  taxon
0  spp1
1  spp1
2  spp3

df2:

  taxon score
0  spp1     8
1  spp2     7
2  spp3     6
3  spp4    17

результат:

  taxon score
0  spp1     8
1  spp1     8
2  spp3     6
0 голосов
/ 10 января 2020

Я наткнулся на решение, я изменил:

result = pd.merge(df1,
                  df2[['iapa_score']],
                  left_on=['taxon'],
                  right_on=['taxon'],
                  how='outer')

на

result = pd.merge(df1,
                  df2,
                  left_on=['taxon'],
                  right_on=['taxon'],
                  how='outer')

, и это сработало. У меня сложилось впечатление, что имена столбцов в [] после второго кадра данных подразумевают те столбцы, к которым вы хотите присоединиться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...