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

如何遍历各CSV文件,更新多边形Shapefile属性并导出对应文件?

批量关联CSV与Shapefile并导出新Shapefile

核心实现思路

  • 遍历指定目录下的所有目标CSV文件
  • 读取原始多边形Shapefile作为基础空间数据
  • 通过共同关联字段(如唯一ID)将每个CSV的属性与Shapefile进行关联匹配
  • 为每个CSV生成一份带对应关联属性的新Shapefile,文件名与原CSV对应

前置准备

  • 安装依赖工具库:pip install geopandas pandas
  • 确认所有CSV文件与原始Shapefile存在唯一匹配的关联字段(比如polygon_id,需保证字段值一一对应)

可运行代码示例

import geopandas as gpd
import pandas as pd
import os

# 配置路径(根据实际情况修改)
original_shapefile = "你的原始多边形文件.shp"
csv_folder = "存放所有CSV的文件夹路径"
output_folder = "新Shapefile的输出目录"

# 创建输出目录(不存在则自动生成)
os.makedirs(output_folder, exist_ok=True)

# 读取原始Shapefile
base_gdf = gpd.read_file(original_shapefile)

# 遍历处理每个CSV
for file_name in os.listdir(csv_folder):
    if file_name.lower().endswith(".csv"):
        csv_path = os.path.join(csv_folder, file_name)
        # 读取CSV数据
        csv_df = pd.read_csv(csv_path)
        # 关联属性(这里假设关联字段为'polygon_id',根据实际字段名修改)
        merged_gdf = base_gdf.merge(csv_df, on="polygon_id", how="left")
        # 生成输出文件名
        output_name = f"关联_{os.path.splitext(file_name)[0]}.shp"
        output_path = os.path.join(output_folder, output_name)
        # 导出为Shapefile
        merged_gdf.to_file(output_path, driver="ESRI Shapefile")
        print(f"已完成导出: {output_path}")

关键注意事项

  • 如果CSV与Shapefile的关联字段名不同,修改merge参数为left_on和right_on,比如:
    merged_gdf = base_gdf.merge(csv_df, left_on="shape_id", right_on="csv_id", how="left")
    
  • how="left"会保留原始Shapefile的所有多边形,无匹配的CSV数据会填充为NaN;若只保留匹配的多边形,改为how="inner"
  • Shapefile对字段名长度有严格限制(最多10个字符),若CSV列名过长,建议先通过csv_df.rename(columns={"长列名": "短列名"}, inplace=True)重命名后再关联
  • 超大CSV文件可通过pd.read_csv(csv_path, chunksize=10000)分块读取,避免内存溢出

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 20:24:30