簡體   English   中英

在Python while循環中使用= rand(between)拉取Excel工作表,並將結果導出為.dbf

[英]pulling an excel sheet with =rand(between) in a Python while loop, and exporting results as .dbf

提出我的問題:我對堆棧溢出非常陌生,而對Python來說則相對較新。

我正在設置靈敏度分析。 我正在使用范圍為0.1-1的40個參數。我的分析需要同時將這些參數同時改變+ -0.1大約500次。 然后將這些值輸入到ArcGIS工具中。 因此,對於40個參數,我需要500套隨機值。 然后將這些參數值與工具的輸出進行比較,以查看模型對哪些參數最敏感。 我已經建立了一個Excel工作表,每次打開這些工作表時都會隨機計算這些值,但是問題是它們必須采用.dbf格式才能被ArcGIS工具讀取。

我設置了一個while循環(開始10次迭代,但需要大約500次),並嘗試了兩種不同的方法,希望我可以自動調用.xls生成隨機數,然后將其導出的過程到.dbf。

第一個arcpy.CopyRows_management正確導出到.dbf。 問題在於,每次迭代的輸出都完全相同,而不是包含0.1、0.2、0.3等值,而是包含0.22、0.37、0.68等值。即使是在.xls中的公式中指定。

我還嘗試了arcpy.TabletoTable_conversion,但是拋出了錯誤999999:執行函數時出錯。

我願意接受各種建議。 也許有一種更簡單的方法可以在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

在Excel中計算值時,您將始終獲得所有小數。 即使將數字格式指定為小數點后1位,整數仍然存在。 因此,我認為這就是為什么您沒有獲得帶有十進制小數的“精確數字”的原因。 應用舍入函數僅獲得一個小數。

復制行僅將值復制到dbf中,它不會打開Excel來調用該公式來計算新的隨機值。

因此,您將不得不在Python中計算隨機值並創建dBase輸出,或者您需要實際打開一個Excel實例-應當觸發新的隨機值-然后將該Excel工作表另存為dBase。

也許使用CalculateField_management用您的值填充ArcMap表並將該數據導出到dBase即可,即使用以下方法:

     arcpy.TableToDBASE_conversion(tableName, outPath)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM