如何解决np.nan 在 GeoSeries 中变为 None
看起来 GeoPandas 不喜欢 np.nan
,至少在我的版本中,0.8.1
。当我将 np.nan
传递给 GeoSeries 时,它变成了 None
,我不知道如何取回 np.nan
。
import geopandas as gpd
from shapely.geometry import Point as pt
import numpy as np
lt = [np.nan,np.nan,pt([1,2]),pt([0,0])]
ser = gpd.GeoSeries(lt)
# Somehow the first two elements of ser became None
ser[0] is None #True
np.isnan(ser[0]) #TypeError
# I don't even know how to put a np.nan in the GeoSeries
ser[0] = np.nan # This doesn't work
# These tests still give the same results
ser[0] is None #True
np.isnan(ser[0]) #TypeError
我错过了什么吗?这是预期的行为吗?有没有办法在 np.nan
中获取 GeoSeries
?
解决方法
文档中有两个部分可以回答您的问题。
来自关于 GeoSeries
的部分A GeoSeries
本质上是一个向量,其中向量中的每个条目都是一组与一次观察相对应的形状。
geopandas 具有三类基本几何对象(实际上是形状对象):
- 点/多点
- 线/多线
- 多边形/多多边形
请注意,GeoSeries 中的所有条目不必具有相同的几何类型,但如果不是这种情况,某些导出操作将失败。
来自关于 missing and empty geometries
的部分缺少几何图形是 GeoSeries
中的未知值。标量对象(访问 GeoSeries 的单个元素时)是 Python None
对象。
所以 geopandas 需要这种行为。
评论
在最新版本中,可能会产生不推荐的 NaN
值。
如果您运行 gpd.GeoSeries([np.nan,np.nan,pt([1,2]),pt([0,0])])
,则结果系列的类型为 GeoSeries
。
如果像这样 gpd.GeoSeries([10,0])])
那样混合浮点数和点数,结果是 Series
类型,它现在是一个包含 NaN
值的后备。
在 geopandas 0.8.0
中,这会引发警告:You are passing non-geometry data to the GeoSeries constructor.
在未来的版本中,这将引发错误。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。