Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python while循环中使用=rand(between)拖拽excel工作表,并将结果导出为.dbf_Python_Random_Arcpy - Fatal编程技术网

在Python while循环中使用=rand(between)拖拽excel工作表,并将结果导出为.dbf

在Python while循环中使用=rand(between)拖拽excel工作表,并将结果导出为.dbf,python,random,arcpy,Python,Random,Arcpy,作为我问题的前言:我对堆栈溢出非常陌生,对Python也相对陌生 我正在进行敏感性分析。我正在使用40个参数,范围从0.1到1。我的分析要求同时将这些参数改变+-0.1,大约500倍。然后,这些值将输入到ArcGIS工具中。所以,我需要500组随机值,40个参数。然后将这些参数值与工具的输出进行比较,以查看模型对哪些参数最敏感。我已经设置了一个Excel工作表,每次打开它时都会随机计算这些值,但问题是它们需要采用.dbf格式才能被ArcGIS工具读取 我已经建立了一个while循环(10次迭代开

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

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

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

首先,arcpy.CopyRows\u管理正确导出到.dbf。问题是每次迭代的输出都是完全相同的,它没有0.1、0.2、0.3等值,而是包含0.22、0.37、0.68等值。虽然在.xls中的公式中指定了这一点,但它并没有达到十分之一

我还尝试了arcpy.TabletoTable_转换,但这会抛出错误99999:ERROR executing函数

我愿意接受各种建议。也许有一种更简单的方法可以在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
i=0
当我<10时:
#设置特定于运行的变量
lulc=“D:\\SARuns\\lulc\u nosoils\u rand.xls\\lulc\u nosoils$”
folder=“D:\\SARuns”
打印“阅读lulc”
newlulc=“D:\\SARuns\\lulc\u nosoils\u rand”+str(i)+“.dbf”
打印“阅读新LULC”
#复制行是将其复制到dbf,但其中的值
#每次跑步都是相同的。而且,没有一个是正确的。
arcpy.CopyRows\u管理(lulc、newlulc)
#桌对桌应该是有效的。但事实并非如此。
#arcpy.TableToTable_转换(lulc、文件夹、新lulc)
打印“转换表”
i+=1

在Excel中计算值时,始终会得到所有小数。即使将numer格式指定为1 decimal,整数仍然存在。所以我假设这就是为什么你不能得到一个小数点的“精确数字”。应用舍入函数仅获取一个小数点

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

因此,您要么必须在Python中计算随机值并创建数据库输出,要么需要实际打开一个Excel实例——它将触发新的随机值——并将Excel工作表另存为数据库

也许使用您的值填充ArcMap表并将该数据导出到dBase会起作用,也就是说,使用类似这样的方法:

     arcpy.TableToDBASE_conversion(tableName, outPath)

抱歉,我有点困惑,您是在excel中创建大量随机数,然后在python中读取它们,然后导出它们吗?为什么不直接用Python创建它们呢?你能解释一下最终的结果吗?嗨,谢谢你的回答!40个参数具有设定值,并基于土地覆盖物是否适合提供栖息地。因此,N1=0.6,而N2=0.8(依此类推,直到N=40)。N1的随机值可能为0.5、0.6或0.7。N2的随机值可能为0.7、0.8、0.9。这有用吗?Hydra IO的最终结果是500个.dbf文件,所有40个参数的值都在+-0.1之间。每个.dbf都是不同的。