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

新手求助:如何从Pandas Series的列表元组提取经纬度?

从Pandas Series中提取嵌套格式的地理坐标

我是Pandas新手,现有一个存储地理坐标的Series,Location字段的格式为包含单个元组的列表,需要从中提取纬度和经度到单独的Series,再合并回原DataFrame,但尝试多种方法均未成功。

尝试过的代码

  • 以下代码返回list类型,但仅获取到Series的第一条记录:
    df['Location'].str.split(',')[0]
    
  • 尝试将其视为字符串提取元素,同样失败:
    longitude = df['Location'].str[0][0].replace('(', '')
    

示例数据

0         [(34.0255,  -118.3002)]
1         [(34.0256,  -118.3089)]
2         [(34.0738,  -118.2078)]
3         [(34.0492,  -118.2391)]
4         [(34.0108,  -118.3182)]
                   ...
594800    [(34.0436,  -118.3053)]
594801    [(33.9572,  -118.3962)]
594802    [(34.1684,  -118.3982)]
594803    [(34.1976,  -118.3965)]
594804    [(34.0504,  -118.3442)]

解决方法

方法1:使用apply逐行提取(直观易懂)

利用apply遍历每个元素,先取出列表中的元组,再提取元组内的经纬度:

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

方法2:使用Pandas的str索引访问(更简洁)

如果你的Pandas版本支持对列表类型的Series使用str索引,可以直接通过层级索引提取:

# 先取列表中的元组,再取元组的第0/1个元素
df['Latitude'] = df['Location'].str[0].str[0]
df['Longitude'] = df['Location'].str[0].str[1]

方法3:批量构造DataFrame(适合大数据量)

将列表批量展开为DataFrame,再合并回原数据,效率更高:

# 将Location的列表转换为DataFrame,每个行对应一个元组
coords_df = pd.DataFrame(df['Location'].tolist(), index=df.index)
# 将元组拆分为两列并命名
coords_df = coords_df.apply(pd.Series).rename(columns={0: 'Latitude', 1: 'Longitude'})
# 合并回原DataFrame
df = df.join(coords_df)

为什么之前的方法失败?

  • 第一种方法中,df['Location'].str.split(',')是把每个元素当作字符串分割,而[0]是取分割后结果的第一行,并非逐行处理,所以只拿到第一条记录。
  • 第二种方法错误地将列表类型的Location当作字符串处理,str[0]取的是每个元素的第一个字符,而非列表中的元组,逻辑完全错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 08:37:14