python - 对字符串列执行 pd.merge 时出现键错误
问题描述
我在两个数据帧上执行合并时遇到问题。
我的数据如下,一个包含 121 个不同指示物种的 140,000 条出现记录的数据集,例如:
taxon
spp1
spp1
spp118
spp98
spp64
spp119
另一个包含 121 种带有数字分数的列表,例如:
taxon score
spp1 8
spp2 4
spp3 2
spp4 7
...
spp118 4
spp119 2
spp120 1
spp121 8
我希望使用分类列作为连接字段将分数列连接到数据集以进行后续分析,我设想输出如下:
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'
解决方案
我认为问题出在这一行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
推荐阅读
- c++ - 如何从向量或数组中选择最常见的数字?(TOP5 toplist)C++
- java - 保存最后 X 个整数的有效方法
- c++ - 如何使用 DXGI 格式 DXGI_FORMAT_R1_UNORM 创建 2D 纹理?
- python - OSError:loadLibrary:无法打开共享对象文件:没有这样的文件或目录
- java - DataIntegrityViolationException:关于 PreparedStatementCallback 的数据截断
- android - Nearby Connections API:无法在 Android 10 上访问接收到的文件
- java - StreamSource - 哪个模块用于模块信息?
- sql - 如何删除相邻的重复行?
- bash - 在 linux 中使用 brew 安装后 kubectl kudo 插件不起作用?
- c# - Kiosk 外部链接捕获 C#