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

Pandas执行join合并DataFrame时匹配字段值变为NaN如何解决

问题根因

调用groupby(['City'])做聚合后,输出的group_metro_manila会自动把City设为行索引,City不再作为普通列存在。你在join时传入on='City'参数,pandas会尝试在当前表的普通列中查找City字段作为匹配键,找不到对应字段就无法完成值匹配,因此关联出的经纬度字段全部为NaN。

修正方案

方法1:适配原有join逻辑(代码改动最小)

既然两个表的匹配维度City都已经被设为索引(你已经对city_location做了set_index('City')操作),直接去掉on参数即可完成索引对齐关联:

merge_df = group_metro_manila.join(
    city_location[['City','Latitude','Longitude']].set_index('City')
)

执行后所有城市的经纬度会按城市名正确匹配,不会出现空值。

方法2:用merge实现(对初学者更友好)

如果暂时记不清join的索引匹配规则,直接用pd.merge显式指定匹配字段,逻辑更直观,不容易踩索引的坑:

merge_df = pd.merge(
    left=group_metro_manila.reset_index(),  # 重置索引,把City从行索引变回普通列
    right=city_location[['City','Latitude','Longitude']],
    on='City',  # 明确指定两个表用City列做关联匹配
    how='left'  # 保留所有分组结果中的城市,和原join的逻辑完全一致
)

这个方法不需要额外关注索引状态,是日常做表关联最不容易出错的写法。

日常避坑提示

做表关联前可以先做两步简单检查,能规避90%的匹配空值问题:

  • 确认用来匹配的字段是在普通列中,还是被设为了行索引,关联时两边的匹配键状态要对齐
  • 打印两边的匹配字段值,检查是否存在拼写不一致、大小写差异、前后多余空格的问题,比如Quezon City写成Quezon City(多一个空格)也会导致匹配失败返回NaN

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 18:27:35