Python如果函数为远程字段

实际上,这是一个GIS中的Python,所以我在Arcgis中使用了表格,并尝试对该字段进行计数并使用类别进行分割。

我有名为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

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


我借用了下面的代码和@ jpmc26。 此代码(减去只用于测试的print语句)应在ArcMap的字段计算器中适用于您,但它只是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")

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

首先,这是可怕的数据库设计。 最小值和最大值应该是整数类型的单独列。 在ESRI更加摇摆不决的数据库设计

此外,你的规则不足以处理范围。 范围检查可能需要与范围的一端或两端进行比较。 所以你将不得不澄清你想要的“索引”规则。

考虑到你有代表范围的字符串,你唯一的选择就是将范围解析为最小值和最大值,并使用这些值。 这在Python中并不难:

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

这是做什么的?

实际上这很简单。 它通过-分割字符串。 然后它遍历结果列表,并且每个元素都将其前导和尾随空白删除,然后转换为int 。 最后,Python在右侧解压缩生成器以填充左侧的变量。

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

一旦你澄清了你的“索引”规则,你可以弄清楚如何使用这个最小值和最大值来得到你的“索引”。

链接地址: http://www.djcxy.com/p/76633.html

上一篇: Python If Function for Ranged Field

下一篇: How to signal "index not found" in Python Function result