在python中传递可选的dataframe参数

F. *_*. R 1 python dataframe pandas

我没有明确指定DataFrame下面代码中的列,而是试图给出一个传递数据框名称的选项,但没有太大的成功.

下面的代码给出了一个

"ValueError:维数错误"错误.

我尝试了另外几个想法,但它们都会导致一种或另一种形式的错误.

除了这个问题,当参数作为显式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) 
Run Code Online (Sandbox Code Playgroud)

总结一下:

目前的用法:

cdf(df['var1'], [df['var2'], df['var3']])
Run Code Online (Sandbox Code Playgroud)

所需用法:

cdf('var1', ['var2', 'var3'], datafr=df)
Run Code Online (Sandbox Code Playgroud)

ily*_*nam 6

更改if datafr != None:if datafr is not None:

Pandas不知道您尝试将数据帧中的哪个值与None进行比较,因此会抛出错误.is如果两个检查datafrNone是指向同一个对象,它是一个更严格的身份检查.看到这个解释.

其他提示:

  • Python迭代列表

    #change this 
    for i in range(len(q)):
          q[i]=datafr[q[i]]
    #to this:
    for i in q:
       q[i] = datafr[q]
    
    Run Code Online (Sandbox Code Playgroud)
  • 如果q是必需参数,则在定义函数时不要执行q = [].如果它是可选参数,请忽略我.

  • Python可以使用position来将传递给函数调用的参数与定义中的参数进行匹配.

    cdf('var1', ['var2', 'var3'], datafr=df)
    #can be written as:
    cdf('var1', ['var2', 'var3'], df)
    
    Run Code Online (Sandbox Code Playgroud)