使用NumPy(或其他)等效于arcpy.Statistics_analysis

时间:2019-07-31 13:53:16

标签: python numpy arcpy

在尝试对大约4000万行表执行arcpy.Statistics_analysis时遇到问题(我认为与内存有关)。我正在尝试计算每个类别在表的各个列中的非空值的数量(例如,类别A的第1列中有x个非空值)。之后,我需要将统计结果添加到输入表中。

是否可以使用numpy(或其他方式)执行此操作?

我当前拥有的代码如下:

arcpy.Statistics_analysis(input_layer, output_layer, "'Column1' COUNT; 'Column2' COUNT; 'Column3' COUNT", "Categories")

我是arcpy / numpy的新手,因此非常感谢!

1 个答案:

答案 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