【问题标题】:Fast and efficient way of joining a csv file to a shapefile将 csv 文件加入 shapefile 的快速有效方法
【发布时间】:2023-01-05 20:40:18
【问题描述】:

我正在尝试使用 JoinField 将包含数百万行的 csv 文件加入到 shapefile 中,但这需要很长时间。连接完成后,连接字段的所有行都为 0。我还尝试将字典与 UpdateCursor 一起使用,但没有发生连接。有一个更好的方法吗?

我使用的 JoinField 代码是:

arcpy.MakeFeatureLayer_management("mukey.shp", "mapunit")
arcpy.CopyRows_management(kvalues_path, "kvalues")   #to give the table OIDs
arcpy.JoinField_management("mapunit", "mukey", "kvalues", "mukey", "ksat_mday")

“mukey”是 csv 文件和 shapefile 之间的公共字段,而“ksat_mday”是我想加入到 shapefile 的字段。

我使用的带有 UpdateCursor 代码的字典用于替换连接两个要素类的连接。可能是代码不起作用,因为我将一个 csv 文件加入到一个 shapefile 而不是两个要素类。代码取自https://community.esri.com/t5/python-blog/turbo-charging-data-manipulation-with-python/ba-p/884079

【问题讨论】:

标签: python arcgis dictionary-comprehension arcpy arcmap


【解决方案1】:

通常,如果您使用 Geopandas 而不是 arcpy,这种连接和连接会更快,但由于您声明您正在处理数百万行,这意味着您正在使用大量数据帧,这是我的建议:

  1. Geopandas 和 Pandas 是相对较慢的库,因为一次实现一个 CPU 核心,但最好的新替代方案是 Pollar,它与 Pandas 数据框架完全一样;但是,通过在所有 CPU 内核上并行处理工作流,您可以在几秒钟而不是几天内看到结果。您需要做的就是:

    在环境中安装 Polars:

    $ pip install polars
    

    要么

    $ conda install polars
    

    然后使用此语法在您使用 arcpy 的持续环境中将您的表转换为 excel 数据表

    arcpy.conversion.TableToExcel(Input_Table, Output_Excel_File, {Use_field_alias_as_column_header}, {Use_domain_and_subtype_description})
    

    然后你可以轻松地阅读你拥有的表格并通过 polars 加入它们,这与 Pandas 和 Geopandas 完全一样。

    最后,确保重新生成 shapefile。

    arcpy.conversion.ExcelToTable(Input_Excel_File, Output_Table, {Sheet}, {field_names_row}, {cell_range})
    

    如果您遇到有关此解决方案的任何问题,请告诉我

【讨论】:

    猜你喜欢
    • 2016-02-05
    • 2021-10-13
    • 2011-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多