我正在尝试整理一组有用的冰川数据。我们的原始数据来自ArcGIS数据集,纬度/经度值存储在一个单独的文件中,现在与我们的所有数据从CSV分离。我正在尝试将纬度/经度文件与我们的数据集合并。这是文件外观的预览。
这是我的主要数据集文件 glims (为清楚起见,删除了列)
| ANLYS_ID | GLAC_ID | AREA |
|----------|----------------|-------|
| 101215 | G286929E46788S | 2.401 |
| 101146 | G286929E46788S | 1.318 |
| 101162 | G286929E46788S | 0.061 |
这是经纬度文件,坐标
| lat | long | glacier_id |
|-------|---------|----------------|
| 1.187 | -70.166 | G001187E70166S |
| 2.050 | -70.629 | G002050E70629S |
| 3.299 | -54.407 | G002939E70509S |
问题是,坐标数据框对于每个纬度为经度的冰川ID都有一行,而我的 glims 数据框对于每个冰川ID都具有多行,且各行之间存在差异每个条目的数据。
我需要基于两个数据帧之间匹配的glacier_id在主数据文件中的每个条目都添加一个纬度-经度值。
这里是我到目前为止尝试过的内容。
glims = pd.read_csv('glims_clean.csv')
coordinates = pd.read_csv('LatLong_GLIMS.csv')
df['que'] = np.where((coordinates['glacier_id'] ==
glims['GLAC_ID']))
错误返回:'int'对象不可下标
和:
glims.merge(coordinates, how='right', on=('glacier_id', 'GLAC_ID'))
错误返回:int'对象没有属性'merge'
我不知道如何解决这么大的合并。我也害怕犯错误,因为几乎不可能抓住错误,因为数据没有其他识别因素。
任何指导都会很棒,谢谢。
答案 0 :(得分:1)
这是一个经典的合并问题。解决方法之一是使用直接loc
和索引匹配
glims = glims.set_index('GLAC_ID')
glims.loc[:, 'lat'] = coord.set_index('glacier_id').lat
glims.loc[:, 'long'] = coord.set_index('glacier_id').long
glims = glims.reset_index()
您也可以使用pd.merge
pd.merge(glims,
coord.rename(columns={'glacier_id': 'GLAC_ID'}),
on='GLAC_ID')
答案 1 :(得分:1)
这应该有效
glims = glims.merge(coordinates, how='left', left_on='GLAC_ID', right_on='glacier_id')