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

使用Geopandas的sjoin函数返回NaN值问题求助

问题排查与修正方案

核心问题分析

你的代码存在以下关键错误,直接导致polygonExport出现NaN值:

  • DataFrame结构错误:单条数据未包裹在列表中,生成的df字段值被拆分为多行,而非单条完整记录。
  • CT数据集未正确格式化:未给CT数据集指定列名,无法提取有效经纬度生成多边形。
  • 点坐标顺序错误:Shapely的Point默认按(经度, 纬度)顺序构造,原代码用反了顺序,导致点位置偏移。
  • 多边形未闭合:构造多边形的首尾坐标不一致,形成无效几何,空间关联判断失效。
  • 导出对象错误:最终导出的是原始polygon,而非关联后的polygonExport。

修正后的完整代码

import pandas as pd
import geopandas as gpd
from shapely.geometry import Point, Polygon

# 1. 正确创建单行DataFrame(单条数据需包裹在列表中)
data = ['26-05-2022', '25-05-2024', 18, 'Acari', 'Ecorer', 40, -15.572136, -74.62736, 'Valid']
columns = ['Approval', 'Expiring', 'Zone', 'Project', 'Owner', 'Size(MW)', 'Latitude', 'Longitude', 'Status']
df = pd.DataFrame(data=[data], columns=columns)

# 2. 按正确顺序创建点GeoDataFrame(经度在前,纬度在后)
geom = [Point(xy) for xy in zip(df['Longitude'], df['Latitude'])]
gdf = gpd.GeoDataFrame(df, crs='epsg:4326', geometry=geom)

# 3. 格式化CT数据集为带列名的DataFrame
ct_columns = ['ID', 'X', 'Y', 'Approval', 'Expiring', 'Zone', 'Project', 'Owner', 'Size(MW)', 'Latitude', 'Longitude', 'Status']
CT = pd.DataFrame(List, columns=ct_columns)

# 4. 提取坐标并闭合多边形(首尾点一致)
CTP = CT[['Longitude', 'Latitude']]
closed_coords = CTP.values.tolist()
closed_coords.append(closed_coords[0])  # 添加首坐标到末尾,闭合多边形
polygon_geom = Polygon(closed_coords)

# 5. 创建多边形GeoDataFrame
polygon = gpd.GeoDataFrame(index=[0], crs='epsg:4326', geometry=[polygon_geom])

# 6. 执行空间关联
polygonExport = polygon.sjoin(gdf, how='left')

# 7. 导出关联后的结果
# polygonExport.to_file(filename=url + projectName + '.shp', driver="ESRI Shapefile")
print(polygonExport)  # 测试时可先打印验证结果

关键修正说明

  1. 坐标顺序:EPSG:4326坐标系下,ShapelyPoint需按(经度, 纬度)传入,否则点会出现在错误位置,无法匹配多边形。
  2. 多边形闭合:只有首尾坐标一致的多边形才是有效几何,空间关联才能正常执行。
  3. DataFrame结构:单条数据必须用列表包裹,才能生成单行的有效记录。
  4. CT数据集列名:明确指定列名后,才能正确提取经纬度字段构造多边形。

执行修正后的代码,polygonExport将正确关联点数据,不再出现NaN值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 13:56:05