【发布时间】:2017-03-19 19:57:53
【问题描述】:
我有这段代码。
class GRIDCODE:
pass
def change(BSMPW):
if GRIDCODE == "1":
return "BSM"
elif GRIDCODE == "3":
return "BSE"
elif GRIDCODE == "4":
return "BSP"
else:
return "None"
我想要它做的是如果 a 列中的值为 1,则将 b 列填充为值 BSM 等等。如果没有数据,则写无。 结果是它写入每一行“无”,这是错误的,因为我正在查看的列 (GRIDCODE) 填充了值 1,3 和 4。
我做错了什么?
编辑:2014 年 6 月 25 日下午 4:31
我会尽量澄清:
我的桌子是这样的:
GRIDCODE BSMPW
1 empty (that does not stand in there, its just blanc)
1 empty
3 empty
1 empty
4 empty
我希望它看起来像这样:
GRIDCODE BSMPW
1 BSM
1 BSM
3 BSE
1 BSM
4 BSP
我之前在另一张桌子上做过这个,效果很好。 BSMPW 列设置为 TEXT,而 GRIDCODE 设置为整数。
【问题讨论】:
-
您的意思是
BSMPW == "1"而不是GRIDCODE == "1"。 GRIDCODE 是一个类。 -
除上述之外,还要确保您要比较的值 (BSMPW) 是字符串类型,如果您传递一个 int,那么它总是会失败并返回“None”。
1 != "1"。您最终如何调用此方法可能有助于澄清正在发生的任何问题。 -
我将 GRIDCODE 定义为一个类,因为我收到一条错误消息:
Global name not defined。我现在删除了class GRIDCODE: pass,它在没有错误消息的情况下工作,但仍然用无填充字段。我检查的所有值都是数字,我想用文本填充字段...我正在使用 ArcMap 和 trz 来填充 Attributetable 中的值。我在这里使用 FieldCalculator。 -
如果您只是传递数字,那将是您的问题。您正在根据句子(类型字符串)检查数字(类型 int),因此它们永远不会等同于 true。您收到全局名称错误,因为您在 if 语句中使用 GRIDCODE 而不是 @AamirAdnan 所说的 BSMPW。
-
我想根据 GRIDCODE(列)的单元格中的值,用 BSP、BSE、BSM 填充 BSMPW(列)中的空单元格。我只想检查,如果有
1,我想将BSP写入一个空单元格,该单元格由arcmap设置为TEXT。如果我正在检查数字或字母,这样做并不重要,因为我不想替换某些东西,因为我想写BSMPW它需要在那里吗?还是我在这里完全错了?
标签: python dependencies populate