首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将列字段转换为列表

如何将列字段转换为列表
EN

Stack Overflow用户
提问于 2011-07-27 16:00:20
回答 2查看 434关注 0票数 0

我试图使用ArcGIS 9.3进行一个简单的字段计算:

代码语言:javascript
复制
New field = Old field - Old field(first value)

在使用python代码的计算字段中,哪一个应该是

表达式:!Old field! - first

代码块:list= [AngOriz] first = list[0]

错误是

代码语言:javascript
复制
ERROR 000539: Runtime error : name 'AngOriz' is not defined Failed to execute (Calculate Field).

如何将列字段转换为列表?

我试过这样做

表达方式:

代码语言:javascript
复制
makeCalc( !AngOriz!, !AngOriz!)

代码块:

代码语言:javascript
复制
def makeCalc(x, y):
    first_value = y.split(' , ')[0] 
    return x-first_value

但我还是明白:

错误000539:运行表达式错误: makeCalc( 43.01841,43.01841):‘makeCalc’对象没有属性‘拆分’无法执行(计算字段)。

我需要计算列的值与同一列的第一个值之间的差异(值是浮点数)。目的是计算滑坡不同测点的位移。

EN

回答 2

Stack Overflow用户

发布于 2011-07-28 00:09:57

我不了解全部情况,你所说的“老球场”(第一值)是什么意思?“旧字段”是一个文本字段,上面有多个值,中间用逗号或类似的东西隔开吗?如果是这样的话,你怎么会在那之前使用老字段呢?

但是无论如何,您所得到的错误是因为在没有定义AngOriz的代码块上.执行您要做的事情的最佳方法是在一个函数中,该函数获取作为参数使用的必要值,并将值返回到字段,下面是一个示例:

在表达式字段上:

代码语言:javascript
复制
my_function(!Old field!, !some_other_field!)

在代码块上:

代码语言:javascript
复制
def my_function(old_field, other_field):
    # supposing other_field is a list of int-values in a string = "1, 23, 5"
    first_value = int(other_field.split(', ')[0])
    return old_field - first_value
票数 0
EN

Stack Overflow用户

发布于 2011-07-29 22:06:54

很抱歉花了这么长时间回答。有一个繁忙的一周:-)好吧,我以为你指的是字符串字段,而不是浮点字段,所以忘记拆分的事情吧。我保留上面的答案,因为它可能帮助其他人寻找如何将(string)字段转换为列表,并将其值用于字段计算。

如果我现在就知道了,你指的是AngOriz列的第一行的值,对吗?因此,如果这个值没有改变,那么只需对函数使用“硬编码”,如下所示:

在表达式字段上:

代码语言:javascript
复制
my_function(!AngOriz!)

在代码块上:

代码语言:javascript
复制
def my_function(old_field):        
    return old_field - 34.123  # just type the value of the first row here

如果您不想“硬编码”第一行的值,那么您将不得不以某种方式检索它,但是我不知道如何在字段计算器上这样做。也许你必须用一种完全不同的方式来解决这个问题。用弧形码写的脚本。

更新:还有在字段计算器中使用全局变量的可能性--这意味着函数调用之间的变量是持久的。由于函数由字段计算器为每一行调用,而且函数中的所有变量通常都在调用之间“死”,因此不可能“记住”局部变量上的某些内容。但是您可以使用一个全局变量来保存第一行的值,并在其他调用中使用它。我还没试过,但也许像这样的东西会管用:

代码语言:javascript
复制
firstValue = None
def my_function(old_field):
    global firstValue
    if firstValue == None:  # this will be true only if this is the first call/row ...
        firstValue = old_field  # ... save the value on the global variable
    return old_field - firstValue
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6847518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档