在 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)
我有一个带有点几何的 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)