2016-01-22 48 views
0

而不是在下面的代碼中明確指定DataFrame列,我試圖給出一個選項,在本身傳遞數據幀的名稱,沒有太多成功。在python中傳遞可選的數據幀參數

下面的代碼給出了一個

"ValueError: Wrong number of dimensions" error.

我試過另外一對夫婦的想法,但他們都導致某種形式的錯誤。

除了這個問題,當參數作爲明確的DataFrame列,p作爲單列傳遞並且q作爲列列表傳遞時,代碼按需要工作。是否有一種巧妙的(或者確實有)任何方式傳遞數據框,以便列可以隱式分配給它?

def cdf(p, q=[], datafr=None): 
    if datafr!=None: 
     p = datafr[p] 
     for i in range(len(q)): 
      q[i]=datafr[q[i]] 
... 
(calculate conditional probability tables for p|q) 

總結:

當前使用情況:

cdf(df['var1'], [df['var2'], df['var3']]) 

期望使用:

cdf('var1', ['var2', 'var3'], datafr=df) 

回答

5

變化if datafr != None:if datafr is not None:

熊貓不知道你試圖與None進行比較的數據幀中的哪個值,所以會引發錯誤。 is檢查datafrNone是否指向同一個對象,這是一個更嚴格的身份檢查。見this explanation

其他提示:

  • 的Python遍歷列表

    #change this 
    for i in range(len(q)): 
         q[i]=datafr[q[i]] 
    #to this: 
    for i in q: 
        q[i] = datafr[q] 
    
  • 如果q是一個必需的參數不做Q = []定義的時候你的函數。如果它是一個可選參數,請忽略我。

  • Python可以使用位置來將傳遞給函數調用的參數與定義中的參數進行匹配。

    cdf('var1', ['var2', 'var3'], datafr=df) 
    #can be written as: 
    cdf('var1', ['var2', 'var3'], df) 
    
+0

謝謝。 datafr不是沒有竅門。我已經嘗試了q [i]的列表迭代,並且拋出了一個錯誤,OTOH是我似乎工作的代碼。 –