在 PyCharm 中使用 arcpy 读取 dbf?
Read dbf with arcpy in PyCharm?
我已将 ArcGIS Desktop 10.7 table 导出到 dbf 文件中。
现在我想独立进行一些 GIS 计算 Python。
因此,我启动了一个引用 ArcGIS Python 解释器的 PyCharm 项目,因此我能够将 arcpy 导入我的 main.py.
问题是:我不想 pip 安装其他模块,但我不知道如何使用 arcpy.
正确读取 dbf table
#encoding=utf-8
import arcpy
path=r"D:\test.dbf"
sc=arcpy.SearchCursor(path) # Does not work: IOError exception str() failed
tv=arcpy.mapping.TableView(path) # Does not work either: StandaloneObject invalid data source or table
dbf文件正确,可以读入ArcGIS
有人可以给我一个想法,如何使用 arcpy 独立读取文件?
使用pandas
ArcMap 中的 Python 带有一些模块。您可以将数据加载到 pandas.DataFrame 并使用此格式。 Pandas 有据可查,网络上已经有很多关于它的问题。进行 groupby 或 table 操作也非常容易。
import pandas as pd
import arcpy
def read_arcpy_table(self, table, fields='*', null_value=None):
"""
Transform a table from ArcMap into a pandas.DataFrame object
table : Path the table
fields : Fields to load - '*' loads all fields
null_value : choose a value to replace null values
"""
fields_type = {f.name: f.type for f in arcpy.ListFields(table)}
if fields == '*':
fields = fields_type.keys()
fields = [f.name for f in arcpy.ListFields(table) if f.name in fields]
fields = [f for f in fields if f in fields_type and fields_type[f] != 'Geometry'] # Remove Geometry field if FeatureClass to avoid bug
# Transform in pd.Dataframe
np_array = arcpy.da.FeatureClassToNumPyArray(in_table=table,
field_names=fields,
skip_nulls=False,
null_value=null_value)
df = self.DataFrame(np_array)
return df
# Add the function into the loaded pandas module
pd.read_arcpy_table = types.MethodType(read_arcpy_table, pd)
df = pd.read_arcpy_table(table='path_to_your_table')
# Do whatever calculations need to be done
使用光标
也可以使用arcpy游标和dict
进行简单计算
此页面上有关于如何正确使用游标的简单示例:
https://desktop.arcgis.com/fr/arcmap/10.3/analyze/arcpy-data-access/searchcursor-class.htm
我的错,
在阅读 Using cursor 方法后,我发现使用
sc=arcpy.SearchCursor(path) # Does not work: IOError exception str() failed
方法是正确的,但是在凌晨 3 点左右的时候,我有点累了,错过了导致错误的路径 中的拼写错误 。然而,一个更具描述性的错误消息,例如IOError could not open file
而不是 IOError exception str() failed
会解决我作为 acrGIS 新手的错误..:/
我已将 ArcGIS Desktop 10.7 table 导出到 dbf 文件中。
现在我想独立进行一些 GIS 计算 Python。
因此,我启动了一个引用 ArcGIS Python 解释器的 PyCharm 项目,因此我能够将 arcpy 导入我的 main.py.
问题是:我不想 pip 安装其他模块,但我不知道如何使用 arcpy.
#encoding=utf-8
import arcpy
path=r"D:\test.dbf"
sc=arcpy.SearchCursor(path) # Does not work: IOError exception str() failed
tv=arcpy.mapping.TableView(path) # Does not work either: StandaloneObject invalid data source or table
dbf文件正确,可以读入ArcGIS
有人可以给我一个想法,如何使用 arcpy 独立读取文件?
使用pandas
ArcMap 中的 Python 带有一些模块。您可以将数据加载到 pandas.DataFrame 并使用此格式。 Pandas 有据可查,网络上已经有很多关于它的问题。进行 groupby 或 table 操作也非常容易。
import pandas as pd
import arcpy
def read_arcpy_table(self, table, fields='*', null_value=None):
"""
Transform a table from ArcMap into a pandas.DataFrame object
table : Path the table
fields : Fields to load - '*' loads all fields
null_value : choose a value to replace null values
"""
fields_type = {f.name: f.type for f in arcpy.ListFields(table)}
if fields == '*':
fields = fields_type.keys()
fields = [f.name for f in arcpy.ListFields(table) if f.name in fields]
fields = [f for f in fields if f in fields_type and fields_type[f] != 'Geometry'] # Remove Geometry field if FeatureClass to avoid bug
# Transform in pd.Dataframe
np_array = arcpy.da.FeatureClassToNumPyArray(in_table=table,
field_names=fields,
skip_nulls=False,
null_value=null_value)
df = self.DataFrame(np_array)
return df
# Add the function into the loaded pandas module
pd.read_arcpy_table = types.MethodType(read_arcpy_table, pd)
df = pd.read_arcpy_table(table='path_to_your_table')
# Do whatever calculations need to be done
使用光标
也可以使用arcpy游标和dict
进行简单计算
此页面上有关于如何正确使用游标的简单示例: https://desktop.arcgis.com/fr/arcmap/10.3/analyze/arcpy-data-access/searchcursor-class.htm
我的错, 在阅读 Using cursor 方法后,我发现使用
sc=arcpy.SearchCursor(path) # Does not work: IOError exception str() failed
方法是正确的,但是在凌晨 3 点左右的时候,我有点累了,错过了导致错误的路径 中的拼写错误 。然而,一个更具描述性的错误消息,例如IOError could not open file
而不是 IOError exception str() failed
会解决我作为 acrGIS 新手的错误..:/