无需硬编码索引,使用自定义变量作为索引查询DataFrame的方法
变量作为DataFrame索引查询的实现方案
你原来示例代码的问题在于df.loc['OBJECTID']写法里的'OBJECTID'是字符串常量,程序会直接把这个字符串作为索引值查询,不会读取同名变量的值,去掉引号即可读取变量内容作为索引值使用。
核心修正点
- 移除
loc参数里的引号,直接传入变量名即可调用变量值查询 - 如果你需要和原有代码逻辑一致,返回DataFrame格式的结果(而非Series),可以把变量放在列表中包裹
- 建议将两个GeoDataFrame作为函数参数传入,避免依赖全局变量,提升代码复用性
可运行实现代码
import geopandas as gpd # 提前读取面、点文件并设置OBJECTID为索引 df_polygon = gpd.read_file("path_to_polygon_file") df_polygon.set_index('OBJECTID', inplace=True) df_point = gpd.read_file("path_to_point_file") df_point.set_index('OBJECTID', inplace=True) def get_building_geom(objectid, polygon_gdf, point_gdf): print("Building with OBJECTID:", objectid) # 与你原有写法保持一致,仅查询geometry列,返回DataFrame格式 polygon = polygon_gdf.loc[[objectid], 'geometry'] point = point_gdf.loc[[objectid], 'geometry'] return polygon, point # 调用示例 target_polygon, target_point = get_building_geom(81207, df_polygon, df_point)
注意事项
- 索引类型对齐:如果你的GeoDataFrame的OBJECTID索引是字符串类型,传参时需要对应传入字符串格式的ID,比如
get_building_geom('81207', df_polygon, df_point),否则会触发KeyError - 如果你只需要获取单个Shapely几何对象,不需要DataFrame格式的返回结果,可以去掉外层列表,写法改为
polygon_gdf.loc[objectid, 'geometry']
内容的提问来源于stack exchange,提问作者Wild_Bill_Hickock
相关产品推荐
相关产品推荐

