2016-01-22 2 views
0

Вместо явного указания столбцов DataFrame в приведенном ниже коде, я пытаюсь дать возможность передать имя фрейма данных сам по себе, без особого успеха.Передача необязательного параметра 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 проверяет, являются ли оба datafr и None указателями на один и тот же объект, что является более строгой проверкой идентификации. См. 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 = [] при определении вашей функции. Если это необязательный параметр, игнорируйте меня.

  • Python может использовать положение для сопоставления аргументов, переданных вызову функции с параметрами в определении.

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

Спасибо. Datafr не является ничем. Я уже пробовал итерацию списка для q [i], и она выдала ошибку, OTOH код, который у меня был, кажется, работает. –