You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何逐行遍历GeoPandas DataFrame?解决SA4_CODE21不连续的遍历问题

解决GeoPandas GeoDataFrame逐行遍历问题

问题分析

你之前的循环逻辑存在核心错误:用行索引的i和i+1去匹配SA4_CODE21字段,而SA4_CODE21是不连续的业务编码(如101、191),和行索引完全无关;同时每次循环修改street_map变量,导致后续循环的数据集被错误过滤,最终无法正常运行。

另外iterrows()本身可以正常遍历GeoDataFrame(包括geometry列),你之前的失败应该是用法错误,而非方法本身的问题。


正确的逐行遍历方法

方法1:使用iterrows()(最直观)

iterrows()返回每一行的索引和行数据(Series对象),可以直接访问所有列,包括geometry:

for index, row in street_map.iterrows():
    # 提取当前行的字段值
    sa4_code = row['SA4_CODE21']
    sa4_name = row['SA4_NAME21']
    geom = row['geometry']
    
    # 这里写你的处理逻辑,比如生成图片、处理空间数据等
    print(f"正在处理: {sa4_name} (编码: {sa4_code})")

方法2:使用itertuples()(更高效)

如果你的数据集较大,itertuples()的遍历速度比iterrows()更快,返回命名元组,可直接通过属性访问字段:

for row in street_map.itertuples():
    sa4_code = row.SA4_CODE21
    sa4_name = row.SA4_NAME21
    geom = row.geometry
    
    # 处理逻辑
    print(f"正在处理: {sa4_name} (编码: {sa4_code})")

方法3:按SA4_CODE21分组处理(如果需求是按区域批量处理)

如果你的目标是按每个SA4_CODE21对应的区域批量处理数据,而非逐行,可使用groupby:

for sa4_code, group_df in street_map.groupby('SA4_CODE21'):
    # group_df是对应SA4编码的子GeoDataFrame
    sa4_name = group_df['SA4_NAME21'].iloc[0]
    
    # 批量处理该区域的逻辑,比如生成区域地图
    print(f"处理区域: {sa4_name} (编码: {sa4_code}),共{len(group_df)}条数据")

内容的提问来源于stack exchange,提问作者nd_dd22

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 05:53:21