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

如何使用GeoPandas批量合并同结构GeoJSON空间文件?

批量合并GeoJSON到单一GeoDataFrame(整合属性列)

问题分析

你需要合并的是同区域、多属性的GeoJSON文件,核心需求是按共享的普查区ID(Geo列)整合所有属性,仅保留一份几何信息。之前的方法错误在于用了行堆叠(append/concat)或不合适的合并键(geometry),导致重复行、属性丢失等问题。

正确实现代码

import os
import geopandas as gpd

# 指向目录中的文件
inputs_path = "你的路径"  # 替换为实际路径
files = os.listdir(inputs_path)
files_mo_geojson = [f for f in files if f.endswith('MO.geojson')]

# 初始化:读取第一个文件作为基础(保留几何列)
gdf_mo = gpd.read_file(os.path.join(inputs_path, files_mo_geojson[0]))

# 遍历剩余文件,按Geo列合并属性
for file in files_mo_geojson[1:]:
    temp_gdf = gpd.read_file(os.path.join(inputs_path, file))
    # 合并时去掉临时文件的几何列,避免重复;按Geo列关联
    gdf_mo = gdf_mo.merge(
        temp_gdf.drop(columns="geometry"),
        on="Geo",
        how="inner"  # 若需保留所有普查区(含缺失属性的),改为how="outer"
    )

# 查看结果
print(gdf_mo.columns)

之前方法的问题说明

  • 方法1:append是行堆叠操作,会把每个文件的所有行重复添加,导致同一普查区多次出现、索引重复,完全不符合"整合属性列"的需求。
  • 方法2:每次concat后没有赋值给gdf_mo,原变量始终是空的GeoDataFrame,相当于未执行有效合并。
  • 方法3:append+dissolve会将所有行堆叠后按label聚合求和,但你的属性是不同指标(不同员工规模的企业数),并非同一指标的重复值,聚合后会错误合并数据。
  • 方法4:用geometry作为合并键存在浮点数精度问题,容易导致匹配失败;且初始空GeoDataFrame第一次合并后,后续文件可能因匹配不上而无法整合属性。

注意事项

  • 确保所有文件的Geo列值完全一致(无格式差异、空格等),否则会出现匹配失败。
  • 若部分普查区在某些文件中缺失,使用how="outer"可保留这些区域,缺失的属性会填充为NaN。
  • 检查各文件的属性列名是否唯一,避免合并后出现xxx_x/xxx_y的重复列名(你的文件名对应不同属性,应该不存在这个问题)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 20:00:16