快速有效地将csv文件连接到shapefile



我试图使用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代码的字典是用于替换连接两个特征类的Join。可能是代码没有工作,因为我正在加入一个csv文件到一个shapefile,而不是两个功能类。代码取自https://community.esri.com/t5/python-blog/turbo-charging-data-manipulation-with-python/ba-p/884079。

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

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

在环境中安装polar:

$ 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})

那么你可以很容易地阅读你的表格,并通过极地将它们连接起来,这就像熊猫和地质熊猫一样。

最后,确保重新生成您的shapefiles。

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

如果你在这个解决方案中遇到任何问题,请告诉我

最新更新