我试图使用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,这样的连接和连接会更快,但由于您声明正在处理数百万行,这意味着您正在处理的数据帧很大,因此我的建议是:
- 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})
如果你在这个解决方案中遇到任何问题,请告诉我