在 GeoPandas 数据框中识别点(南南)

Identifying Point(nan nan) in GeoPandas dataframe

我有一个带有点几何的 GeoPandas 数据框。该数据框是使用以下代码从 Pandas 数据框创建的,该数据框包含用于东距和北距的单独列:

import numpy as np
import pandas as pd
import geopandas as gpd
from shapely.geometry import Point

df = pd.DataFrame({'id':[1,2,3,4,5],
                   'easting':[545200.0,np.nan,360800.0,270500.0,np.nan],
                   'northing':[130600.0,np.nan,510100.0,80350.0,np.nan]})

geodf = gpd.GeoDataFrame(df.drop(['easting','northing'],axis = 1),
                         crs = {'init': 'eps:277000'},
                         geometry = [Point(xy) for xy in zip(df['easting'],
                                                             df['northing'])])

phjCPHEastNrthGDF = gpd.GeoDataFrame(phjCPHEastNrthDF.drop(['easting','northing'],
                                                           axis = 1),
                                     crs = {'init': 'epsg:27700'},
                                     geometry = [Point(xy) for xy in zip(phjCPHEastNrthDF['easting'],
                                                                         phjCPHEastNrthDF['northing'])])

Pandas数据框和GeoPandas数据框打印如下:

原始数据框:

   id   easting  northing
0   1  545200.0  130600.0
1   2       NaN       NaN
2   3  360800.0  510100.0
3   4  270500.0   80350.0
4   5       NaN       NaN

Geopandas 数据框:

   id               geometry
0   1  POINT (545200 130600)
1   2        POINT (nan nan)
2   3  POINT (360800 510100)
3   4   POINT (270500 80350)
4   5        POINT (nan nan)

实际上,数据框包含 250k+ 个点。我希望能够识别所有根据 np.nan 的东距和北距值创建的点(但原始的 'easting' 和 'northing' 列不再可用)。

我试过使用 .isna().is_empty 但没有成功:

print(geodf.loc[(geodf['geometry'].isna()),:])
print(geodf.loc[(geodf['geometry'].is_empty),:])

...都打印空数据帧。

有什么方法可以识别所需的几何点吗?

geodf[geodf['geometry'].is_valid]

结果:

   id                       geometry
0   1  POINT (545200.000 130600.000)
2   3  POINT (360800.000 510100.000)
3   4   POINT (270500.000 80350.000)

要获得 Nan 分,请使用 geodf[~geodf['geometry'].is_valid]


更新:
以上内容适用于 1.7.2 之前的 shapely 版本。从版本 1.8 开始,从 np.nan 值创建的点被认为是空的,因此 is_empty 按预期工作:

   id                       geometry
0   1  POINT (545200.000 130600.000)
1   2                    POINT EMPTY
2   3  POINT (360800.000 510100.000)
3   4   POINT (270500.000 80350.000)
4   5                    POINT EMPTY

geodf[~geodf['geometry'].is_empty]的结果:

   id                       geometry
0   1  POINT (545200.000 130600.000)
2   3  POINT (360800.000 510100.000)
3   4   POINT (270500.000 80350.000)