You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为多站点时序数据匹配经纬度遇NaN问题,求高效解决方案

解决时序数据匹配经纬度全为NaN的问题

问题根源

你的代码返回全NaN,核心原因是两个数据集的ID格式不匹配:

  • 时序数据里的ID是数值类型(比如301、321)
  • 元数据里的ID是带双引号、尾部空格的字符串(比如"301 ")
    两者类型和内容都不统一,导致map无法找到对应匹配项,只能返回NaN。

高效解决方案

步骤1:清洗元数据的ID列

先把元数据里的ID处理成和时序数据一致的格式:

# 去除ID字段的双引号和前后空格,再转为整数类型
metadata['ID'] = metadata['ID'].str.strip('" ').astype(int)

步骤2:匹配经纬度(两种可选方式)

方式一:用map继续实现

清洗后再用你原来的逻辑,就能正常匹配:

df['latitude'] = df['ID'].map(metadata.set_index('ID')['Latitude'])
df['longitude'] = df['ID'].map(metadata.set_index('ID')['Longitude'])

方式二:用merge(更直观,适合多字段匹配)

如果需要同时匹配纬度和经度,用merge代码可读性更强,效率也很高:

# 只保留元数据里需要的ID、纬度、经度列,避免合并冗余字段
merged_df = df.merge(metadata[['ID', 'Latitude', 'Longitude']], on='ID', how='left')

how='left'会保留时序数据里所有行,即使某个ID在元数据里找不到(这种情况会返回NaN,方便你排查缺失的站点)。

验证匹配结果

可以用以下代码检查是否还有匹配失败的情况:

# 查看匹配后纬度仍为NaN的行
print(merged_df[merged_df['Latitude'].isna()])

如果输出为空,说明所有ID都匹配成功;如果有内容,说明这些ID在元数据里不存在,需要补充元数据或者检查ID是否有误。

内容的提问来源于stack exchange,提问作者Ahegg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 10:37:09