在Python while循环中使用=rand(between)绘制excel表,并将结果导出为.db

2024-10-02 12:27:37 发布

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

作为我问题的前言:我对堆栈溢出非常陌生,对Python也比较陌生。在

我正在做灵敏度分析。我使用40个参数,范围从0.1到1。我的分析需要同时改变这些参数+-0.1大约500倍。这些值将被输入到ArcGIS工具中。所以,我需要500组随机值,40个参数。然后将这些参数值与工具的输出进行比较,以查看模型对哪些参数最敏感。我已经建立了一个Excel表,每次打开它时都会随机计算这些值,但问题是它们必须是.dbf格式才能被ArcGIS工具读取。在

我已经设置了一个while循环(要开始10次迭代,但需要大约500次),并尝试了两种不同的方法,希望能够自动调用.xls生成随机数,然后将其导出到.dbf的过程。在

第一个,arcpy.CopyRows_管理已正确导出到.dbf。问题是每次迭代的输出都是完全相同的,它的值不是0.1、0.2、0.3等,而是包含0.22、0.37、0.68等值。它不是十分之一,即使在.xls中的公式中指定了这个值。在

我也试过了arcpy.TabletoTable_转换但这引发了错误999999:ERROR executing function。在

我愿意接受各种各样的建议。也许有一种更简单的方法可以在Python中将结果随机采样并导出到.dbf。这不需要使用arcpy来完成,但这就是我真正使用的全部。我真的很感谢你的帮助!谢谢你的时间。在

i = 0
while i < 10:
    # Set run specific variables
    lulc = "D:\\SARuns\\lulc_nosoils_rand.xls\\lulc_nosoils$"
    folder = "D:\\SARuns"

    print "Reading lulc"

    newlulc = "D:\\SARuns\\lulc_nosoils_rand"+str(i)+".dbf"

    print "Reading newlulc"

    # Copy rows is copying it to a dbf, but the values inside 
    # are the same for each run. And, none are correct.    
    arcpy.CopyRows_management(lulc, newlulc)

    # Table to table should work. But isn't.    
    # arcpy.TableToTable_conversion(lulc, folder, newlulc)

    print "Converting table"    
    i+= 1

Tags: 工具方法参数xlsprintarcgisarcpydbf
1条回答
网友
1楼 · 发布于 2024-10-02 12:27:37

在Excel中计算数值时,你总是得到所有的小数。即使将数字格式指定为1个十进制数,整数仍然存在。所以我想这就是为什么你不能用一个十进制数得到“精确数”。应用取整函数只能得到一个十进制数。在

复制行只复制dbf中的值,它不会打开Excel来调用计算新随机值的公式。在

因此,您要么必须在Python中计算随机值并创建dBase输出,要么您需要实际打开一个Excel实例(它应该触发新的随机值),然后将Excel表另存为dBase。在

也许使用CalculateField_management来填充ArcMap表并将数据导出到dBase可能会起作用,例如,使用如下方法:

     arcpy.TableToDBASE_conversion(tableName, outPath)

相关问题 更多 >

    热门问题