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

如何从map映射结果提取单独返回值以拆分经纬度列?

拆分经纬度元组为单独列的解决方案

没问题,这事儿其实有好几条路子能走,我给你拆解清楚:

方法1:从已有的geolocation列拆分(最直接)

如果你已经生成了geolocation列,只需要把元组里的两个元素分别提取到新列就行。这里有两种高效的方式:

方式A:用apply提取索引

# 提取纬度(元组第一个元素)
df['latitude'] = df['geolocation'].apply(lambda x: x[0])
# 提取经度(元组第二个元素)
df['longitude'] = df['geolocation'].apply(lambda x: x[1])

方式B:用pd.DataFrame批量拆分(更高效)

当数据量比较大的时候,这种方法速度更快:

# 把元组列表转换成DataFrame,直接赋值给新列
df[['latitude', 'longitude']] = pd.DataFrame(df['geolocation'].tolist(), index=df.index)

方法2:直接生成经纬度列,跳过中间元组列

如果你不需要保留geolocation这个中间列,或者想一步到位,可以修改你的add_geolocation函数,直接生成latitude和longitude:

def add_geolocation(df, country_column):
    # 调用geolocate后直接拆分成两列
    df[['latitude', 'longitude']] = country_column.apply(
        lambda x: pd.Series(geolocate(x))  # 把元组转成Series,自动对应列
    )
    # 如果还是需要保留geolocation列,加上这行
    df['geolocation'] = list(zip(df['latitude'], df['longitude']))
    return df

关于你问的「在lambda里拆分元组」

你提到的先拆分latitude, longitude = geolocate(country)再单独取用的思路是可行的,但直接这么写在lambda里不太方便,不过可以换个方式实现:

# 但注意:这种方式会调用geolocate两次,效率偏低,不推荐大数据集用
df['latitude'] = country_column.apply(lambda x: geolocate(x)[0])
df['longitude'] = country_column.apply(lambda x: geolocate(x)[1])

因为每提取一次纬度或经度都要调用一次geolocate,相当于重复请求地理编码,既慢又可能浪费API配额(如果用的是第三方地理服务),所以更推荐前面两种只调用一次的方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 17:42:27