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

含np.nan几何值的DataFrame转GeoDataFrame报错的解决方法

保留含空几何值的DataFrame转GeoDataFrame方案

问题场景

将包含np.nan几何值的Pandas DataFrame转换为GeoDataFrame时,直接调用wkt.loads会触发TypeError: Only str is accepted.,因为wkt.loads无法处理非字符串类型的空值,同时需要保留含空值的行,不能删除。

修正后的基础代码(先修正原代码笔误)

原代码存在两处笔误:DataFrame的列名未加引号,以及后续引用列名时写错(geom应为geo),修正后代码如下:

import pandas as pd
import geopandas as gpd 
import numpy as np
from shapely import wkt

df = pd.DataFrame({
                   'id': [0, 1, 2, 3],
                   'geo': [
                         'POLYGON ((35.067912 -106.700884, 35.066714 -106.70128, 35.066555 -106.700697, 35.066492 -106.700468, 35.066134 -106.700367, 35.066088 -106.700129, 35.066062 -106.700005, 35.067519 -106.699412, 35.06763 -106.69937, 35.067659 -106.699537, 35.067737 -106.699977, 35.067814 -106.700378, 35.067891 -106.700773, 35.067912 -106.700884))', 
                         np.nan,
                         'POLYGON ((35.067912 -106.700884, 35.066714 -106.70128, 35.066555 -106.700697, 35.066492 -106.700468, 35.066134 -106.700367, 35.066088 -106.700129, 35.066062 -106.700005, 35.067519 -106.699412, 35.06763 -106.69937, 35.067659 -106.699537, 35.067737 -106.699977, 35.067814 -106.700378, 35.067891 -106.700773, 35.067912 -106.700884))',
                         np.nan
                        ]
                  })

解决方案1:自定义函数处理空值

通过自定义函数,对空值返回None(GeoPandas会将其识别为空几何),非空值调用wkt.loads解析:

def parse_wkt(geo_str):
    if pd.isna(geo_str):
        return None
    return wkt.loads(geo_str)

usgeo = gpd.GeoDataFrame(df)
usgeo['geometry'] = usgeo['geo'].apply(parse_wkt)
# 可选:根据数据实际坐标系设置,示例为WGS84
usgeo = usgeo.set_crs("EPSG:4326")

解决方案2:使用GeoPandas内置的from_wkt方法(推荐)

GeoPandas提供了gpd.GeoSeries.from_wkt方法,原生支持处理空值,无需自定义函数:

# 直接将geo列转换为GeoSeries,自动处理空值
usgeo = gpd.GeoDataFrame(df, geometry=gpd.GeoSeries.from_wkt(df['geo']))
# 可选:根据数据实际坐标系设置,示例为WGS84
usgeo = usgeo.set_crs("EPSG:4326")

效果说明

两种方法都能保留含np.nan的行,转换后的GeoDataFrame中,空值对应的geometry列会被标记为None(在GeoPandas中代表空几何),不会丢失任何数据行。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 00:36:25