GIS之arcgis系列08:arcpy实现批量excel转矢量点

文件夹内有很多excel表,每个excel表内有很多数据,爬取每条数据的日期、精度、纬度,根据经纬度将数据转换成矢量点,并指定坐标系。


完整版代码如下:

代码均已经过测试,可直接copy至arcgis工具箱中使用。

(copy后注意改成适用于自己数据的代码,微调相关信息)

python 复制代码
# -*- coding: utf-8 -*-
import pandas as pd
import arcpy
import os

input_folder = arcpy.GetParameterAsText(0)
output_folder = arcpy.GetParameterAsText(1)
if not os.path.exists(output_folder):
    os.makedirs(output_folder)
spatial_ref = arcpy.SpatialReference(4326)
temp_folder = output_folder

def process_excel_file(file_path, output_folder, temp_folder):
    df = pd.read_excel(file_path, header=0)

    columns_to_delete = [3, 4, 5, 6, 7, 10, 12, 13, 15, 16, 18, 21, 22]
    df.drop(df.columns[columns_to_delete], axis=1, inplace=True)

    new_column_names = {
        df.columns[2]: 'temmean',
        df.columns[3]: 'pre',
        df.columns[4]: 'temmax',
        df.columns[5]: 'windmax',
        df.columns[6]: 'temmin',
        df.columns[7]: 'rainmax'
    }
    df.rename(columns=new_column_names, inplace=True)

    date_col = 'Date'
    df[date_col] = pd.to_datetime(df[date_col])

    unique_dates = df[date_col].dt.date.unique()

    for date in unique_dates:
        date_df = df[df[date_col].dt.date == date]
        date_str = date.strftime('%Y%m%d')
        doy = date.timetuple().tm_yday
        temp_csv = os.path.join(temp_folder, "{}.csv".format(date_str))
        date_df.to_csv(temp_csv, index=False, encoding='utf-8')

        temp_layer = "temp_layer"
        if arcpy.Exists(temp_layer):
            arcpy.Delete_management(temp_layer)

        arcpy.MakeXYEventLayer_management(
            temp_csv, 'LON', 'LAT', temp_layer, spatial_ref
        )

        year_folder = file_path.split("\\")[-1].split(".")[0]
        print (year_folder)
        year_folder_path = os.path.join(output_folder, year_folder)
        if not os.path.exists(year_folder_path):
            os.makedirs(year_folder_path)

        output_shapefile = os.path.join(year_folder_path, "{}_{}.shp".format(year_folder, doy))
        arcpy.FeatureClassToFeatureClass_conversion(temp_layer, year_folder_path, os.path.basename(output_shapefile))


        os.remove(temp_csv)

for filename in os.listdir(input_folder):
    if filename.endswith(".xlsx"):
        file_path = os.path.join(input_folder, filename)
        process_excel_file(file_path, output_folder, temp_folder)

---------------完------------

相关推荐
我不当帕鲁谁当帕鲁1 小时前
arcgis for js实现FeatureLayer图层弹窗展示所有field字段
前端·javascript·arcgis
没有出口的猎户座1 小时前
arcgis做buffer
arcgis
冰淇淋烤布蕾6 小时前
EasyExcel使用
java·开发语言·excel
图片转成excel表格7 小时前
Excel中怎么提取超出部分数值,比如5w是目标,超出100%和120%的值怎么用公式提取?
excel
GIS思维11 小时前
ArcGIS的汉字(亚洲文本)垂直标注
arcgis·arcgis标注·arcgis垂直标注
GIS思维11 小时前
ArcGIS Pro属性表乱码与字段名3个汉字解决方案大总结
字符编码·arcgis·arcgis pro·arcgis pro属性表乱码·shp编码·shp限制
周末zm13 小时前
golang将word、excel转换为pdf
pdf·word·excel
孟秋与你14 小时前
【excel】easy excel如何导出动态列
java·excel
Say Bay To The Bugs16 小时前
EasyExcel 使用多线程按顺序导出数据
开发语言·excel
机器懒得学习16 小时前
Python & PyQt5 实现 .his 文件批量转 Excel 工具
开发语言·python·excel