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

如何拆分Pandas DataFrame中存储地理坐标的GEO列为纬度(LAT)与经度(LONG)列并解决TypeError报错

解决Pandas拆分GEO列的报错与正确实现方法

嘿,你的报错原因很明确——你错误地把Pandas的字符串访问器str当成函数来调用了(str('POINT ()')这种写法是不对的),df['GEO'].str是StringMethods对象,得用它提供的方法比如replace、split来处理字符串。

下面是能实现你需求的完整代码,我会一步步解释:

import pandas as pd
df = pd.DataFrame({'NAME': ['Paris', 'New York', 'Rio'], 'GEO': ['POINT (48.85 2.31647)', 'POINT (40.731499671618 -73.993457389558)', 'POINT (-22.9 -43.2)']})

# 1. 先清理GEO字段,去掉"POINT ("和结尾的")"
cleaned_geo = df['GEO'].str.replace(r'POINT \(|\)', '', regex=True)
# 2. 按空格拆分字符串,扩展成两列并命名为LAT和LONG
lat_long_df = cleaned_geo.str.split(' ', expand=True).rename(columns={0: 'LAT', 1: 'LONG'})
# 3. 把拆分后的列合并回原DataFrame
df = pd.concat([df, lat_long_df], axis=1)

print(df)

代码解释:

  • 清理字符串:用正则表达式r'POINT \(|\)'匹配POINT (和结尾的),然后替换成空字符串,这样就得到了纯经纬度的字符串(比如48.85 2.31647)。这里要注意括号是正则的特殊字符,所以必须用\转义。
  • 拆分并生成新列:str.split(' ', expand=True)会把每个字符串按空格拆分成两个元素,并且自动变成DataFrame格式,再用rename把默认的0、1列名改成你需要的LAT和LONG。
  • 合并数据:用pd.concat横向合并原DataFrame和新生成的经纬度列,axis=1表示按列合并。

运行后你会得到期望的输出:

NAME                                                GEO                LAT                LONG
0     Paris                          POINT (48.85 2.31647)              48.85             2.31647
1  New York  POINT (40.731499671618 -73.993457389558)  40.731499671618  -73.993457389558
2       Rio                            POINT (-22.9 -43.2)             -22.9              -43.2

额外优化:

如果后续需要对经纬度做数值计算,可以把这两列转换成浮点型:

df[['LAT', 'LONG']] = df[['LAT', 'LONG']].astype(float)

内容的提问来源于stack exchange,提问作者valentim.kodak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 15:02:30