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

Geopandas循环加载年度Shapefile出现重复循环与存储异常问题

问题原因及解决办法

循环逻辑完全错误

你的代码嵌套循环顺序搞反了:

  • 外层遍历每个.shp文件,内层却重复循环1900-2014所有年份,导致每个Shapefile被无意义读取115次(2014-1900+1),这是运行时间过长的直接原因。
  • 每次内层循环都会用当前读取的同一个Shapefile,覆盖字典里所有年份对应的条目,最后所有dataXXXX键存储的自然都是最后一个被遍历到的Shapefile。

核心问题:未建立文件与年份的对应关系

你用Fiona时应该是每个年份对应一个独立的Shapefile(比如文件名包含年份标识),但现在的代码完全忽略了文件名和年份的关联,强行给每个文件绑定所有年份,彻底违背了原逻辑。

修正后的代码示例

假设你的Shapefile文件名包含年份(比如data1900.shp、data1901.shp...),可以这样修改:

import geopandas as gpd
import os

all_data = {}
path = r'C:\Users\'
files = os.listdir(path)

for file in files:
    if file.endswith('.shp'):
        # 从文件名提取年份(根据你的实际文件名格式调整)
        # 示例:从文件名中提取连续数字作为年份
        year_str = ''.join([c for c in file if c.isdigit()])
        # 验证年份是否在目标范围内
        if year_str and 1900 <= int(year_str) <= 2014:
            fname = os.path.join(path, file)
            shape = gpd.read_file(fname)
            print(f'Done {year_str}')
            all_data[f'data{year_str}'] = shape

如果文件名和年份的对应规则不同(比如1900_data.shp),只需要调整提取年份的逻辑即可。

修改后,每个Shapefile只会被读取一次,且对应到正确的年份键上,不会再出现重复循环和覆盖的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 17:40:47