在尝试对大约4000万行表执行arcpy.Statistics_analysis
时遇到问题(我认为与内存有关)。我正在尝试计算每个类别在表的各个列中的非空值的数量(例如,类别A的第1列中有x个非空值)。之后,我需要将统计结果添加到输入表中。
是否可以使用numpy(或其他方式)执行此操作?
我当前拥有的代码如下:
arcpy.Statistics_analysis(input_layer, output_layer, "'Column1' COUNT; 'Column2' COUNT; 'Column3' COUNT", "Categories")
我是arcpy / numpy的新手,因此非常感谢!
答案 0 :(得分:0)
您可以使用函数arcpy.da.TableToNumPyArray将表转换为numpy数组。然后将数组转换为ggplotly(p) #seems for this we should also set "colour = trans"
对象。
这里是代码示例(我假设您正在使用要素类,因为您使用了空值一词,如果您使用shapefile,则需要更改代码,因为不支持空值的内容将被替换为一个空格字符串(pandas.DataFrame
:
' '
关于在没有更多信息的情况下将结果连接到输入表,要给您一个准确的答案就可以满足您的期望是很复杂的(因为有多个列,所以不确定要添加哪个值)。
编辑:
根据您的说明,还有一些其他代码:
import arcpy
import pandas as pd
# Change these values
gdb_path = 'path/to/your/geodatabase.gdb'
table_name = 'your_table_name'
cat_field = 'Categorie'
fields = ['Column1','column2','Column3','Column4']
# Do not change
null_value = -9999
input_table = gdb_path + '\\' + table_name
# Convert to pandas DataFrame
array = arcpy.da.TableToNumPyArray(input_table,
[cat_field] + fields,
skip_nulls=False,
null_value=null_value)
df = pd.DataFrame(array)
# Count number of non null values
not_null_count = {field: {cat: 0 for cat in df[cat_field].unique()}
for field in fields}
for cat in df[cat_field].unique():
_df = df.loc[df[cat_field] == cat]
len_cat = len(_df)
for field in fields:
try: # If your field contains integrer or float
null_count = _df[field].value_counts()[int(null_value)]
except IndexError: # If it contains text (string)
null_count = _df[field].value_counts()[str(null_value)]
except KeyError: # There is no null value
null_count = 0
not_null_count[field][cat] = len_cat - null_count