我没有在下面的代码中明确指定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)
总结:
目前的用法:
cdf(df['var1'], [df['var2'], df['var3']])
期望的用法:
cdf('var1', ['var2', 'var3'], datafr=df)
答案 0 :(得分:6)
将if datafr != None:
更改为if datafr is not None:
Pandas不知道您尝试与无比的数据帧中的哪个值,因此会抛出错误。 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是必需参数,则在定义函数时不要执行q = []。如果它是可选参数,请忽略我。
Python可以使用position来将传递给函数调用的参数与定义中的参数进行匹配。
cdf('var1', ['var2', 'var3'], datafr=df)
#can be written as:
cdf('var1', ['var2', 'var3'], df)