用于远程字段的Python If函数

2024-10-06 11:20:45 发布

您现在位置:Python中文网/ 问答频道 /正文

实际上这是GIS中的一个Python,所以我在我的Arcgis中使用table,并尝试使用category对字段进行计数和划分。在

我的字段名为Elevation 数据包含整数示例:
1-2
3-6
2-3
8.5-12
11-12

我需要使用
如果 标高<;1,则索引=0.3;如果标高=2-3,索引=0.6;如果标高>;3,索引=1

我有这个代码:

def Reclass( Elevation ):
    r_min, r_max = (float(s.strip()) for s in Elevation.split('-'))
    print "r_min: {0}, r_max: {1}".format(r_min,r_max)
    if r_min < 1 and r_max < 1:
        return 0.333
    elif r_min >= 1 and r_max >= 1 and r_min <= 3 and r_max <= 3:
        return 0.666
    elif r_min > 3 and r_max > 3:
        return 1
    elif r_min <= 3 and r_max > 3:
        return 1
    else:
        return 999

我的问题是如何剥离它,并使用我上面的规则对它进行分类? 谢谢你


Tags: and数据returntable整数minmax字段名
2条回答

根据注释,您的字段是一个字符串,其中包含您在上面描述的表单的范围。在

首先,这是糟糕的数据库设计。最小值和最大值应该是整数类型的单独列。在ESRI more上挥拳反对良好的数据库设计

此外,你的规则不足以处理一个范围。范围检查需要与范围的一端或两端进行比较。因此,您将来明确您想要的“索引”规则。在

假设您有表示范围的字符串,那么您唯一的选择就是将范围解析为其最小值和最大值,并使用它们。在Python中这并不难:

>>> r = "3 - 6"
>>> r_min, r_max = (int(s.strip()) for s in r.split('-'))
>>> r_min
3
>>> r_max
6

这是干什么的?在

其实很简单。它按-拆分字符串。然后循环生成的列表,每个元素的前导空格和尾随空格都被删除,然后转换成int。最后,Python解压右侧的生成器以填充左侧的变量。在

请注意,格式错误的数据会导致错误。在

一旦你阐明了你的“索引”规则,你就可以知道如何使用这个最小值和最大值来获得你的“索引”。在

我已经从你和@jpmc26下面借用了代码。这段代码(减去刚才用于测试的print语句)应该适用于ArcMap的Field Calculator,但它只是Python代码。问题是,当一个范围的两端属于不同的类别时,您没有告诉我们您要做什么,所以现在我使用else语句来输出999。在

def Reclass( Elevation ):
    r_min, r_max = (float(s.strip()) for s in Elevation.split('-'))
    print "r_min: {0}, r_max: {1}".format(r_min,r_max)
    if r_min < 1 and r_max < 1:
        return 0.333
    elif r_min >= 1 and r_max >= 1 and r_min <= 3 and r_max <= 3:
        return 0.666
    elif r_min > 3 and r_max > 3:
        return 1
    else:
        return 999

print Reclass("0 - 1.1")
print Reclass("5.2 - 10")
print Reclass("2 - 3")
print Reclass("0 - 0")

相关问题 更多 >