使用空间插值python填充shapefile中缺少的数据


这是我的第一个问题。我是蟒蛇的新手,所以请耐心等待。我有一个包含以下数据的形状文件。
ID   Data  geometry
111  0.1   POINT(X,Y)
112  0.2   POINT(X,Y)
113  0.5   POINT(X,Y)
114  NaN   POINT(X,Y)
115  0.3   POINT(X,Y)
116  NaN   POINT(X,Y)
117  NaN   POINT(X,Y)

我想填充列"中缺少的值;数据";使用空间插值
我试过这个教程https://www.youtube.com/watch?v=OfC3KpL4PRw但它为我的数据添加了很多额外的坐标。有没有更简单的方法可以使用空间插值来填充那些缺失的点?

  • 您可以计算出完整的距离矩阵,并使用它查找最近点的值
  • 我不希望这会扩大到大量的分数
  • 模拟了一些数据,因为问题很抽象
import geopandas as gpd
import pandas as pd
from scipy.spatial import distance
import numpy as np
import shapely.geometry
gdf = gpd.read_file(gpd.datasets.get_path("naturalearth_lowres")).set_crs("EPSG:4326")
# get some points - UK boundary
gdf = gdf.loc[gdf["iso_a3"].eq("GBR"), "geometry"].apply(lambda g: g.geoms).explode().apply(
lambda g: g.exterior.coords
).explode().apply(shapely.geometry.Point).reset_index(drop=True).to_frame().assign(
data=lambda d: np.arange(0, len(d))
)
gdf = gpd.GeoDataFrame(gdf)
# randomly set 10 values to NaN
gdf.loc[gdf.sample(20).index, "data"] = np.nan
# build matrix of distances...
d = pd.DataFrame(distance.cdist(*[np.stack(gdf.geometry.apply(lambda x: [x.x, x.y]))] * 2))
# take mean of nearest 3 co-ordinates
gdf["data_i"] = gdf.apply(
lambda r: gdf.loc[d[r.name].sort_values().index, "data"].dropna().head(3).mean()
if np.isnan(r["data"])
else r["data"],
axis=1,
)
gdf.plot(column="data")
gdf.plot(column="data_i")

最新更新