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

Pandas读取CSV坐标生成Shapely Polygon报错求助

问题分析与解决

你的操作确实有误,直接将DataFrame切片传入Polygon无法正常工作,核心问题有两个:

  • df['coordinates'].iloc[:1]返回的是Series对象(哪怕只取一行),并非Shapely能识别的坐标列表格式
  • 坐标是以字符串形式存储的,必须先解析为数值型的坐标元组集合

正确实现步骤

1. 提取单个坐标字符串

先取出目标行的坐标字符串(注意你代码里列名拼写错误coodinates要修正为coordinates):

coord_str = df['coordinates'].iloc[0]  # 用iloc[0]取单个字符串,而非iloc[:1]

2. 解析字符串为坐标元组列表

对字符串做清洗和分割,转换成Shapely兼容的格式:

# 去掉字符串首尾的引号(如果存在),再分割成单个坐标对
coords_list = coord_str.strip('"').split('),(')
# 逐个处理坐标对,转换为(float, float)元组
clean_coords = []
for coord in coords_list:
    lon, lat = coord.strip('()').split(',')
    clean_coords.append((float(lon), float(lat)))

3. 创建Polygon对象

用清洗后的坐标列表即可正常创建Polygon:

from shapely.geometry import Polygon

poly = Polygon(clean_coords)

完整代码示例

import pandas as pd
from shapely.geometry import Polygon

df = pd.read_csv('thecsv.csv')
# 提取并解析坐标字符串
coord_str = df['coordinates'].iloc[0].strip('"')
coords = [tuple(map(float, c.strip('()').split(','))) for c in coord_str.split('),(')]
# 创建Polygon对象
poly = Polygon(coords)

批量处理所有行的方法

如果要给整个DataFrame新增Polygon列,可以用apply批量处理:

def str_to_polygon(coord_str):
    coord_str = coord_str.strip('"')
    coords = [tuple(map(float, c.strip('()').split(','))) for c in coord_str.split('),(')]
    return Polygon(coords)

df['polygon'] = df['coordinates'].apply(str_to_polygon)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 19:07:50