首页 > 解决方案 > Julia 数据框中具有列名的控制流

问题描述

当 Julia 数据帧中不存在列名时,我正在寻找一种解决方案。

更详细地说,假设我有以下数据框和列表:

df = DataFrame(id= "12345", description= rand(5));
err_Li = ["12345"] 

我需要检查id列是否匹配,err_Li例如:

if (df[1,"id"] in err_Li)
    println("NOT VALID")
else 
end

但是,在我的某些数据框中,列名id不存在。因此,在 Python 中,我可以处理try-except以下问题:

try :
    if df['id'][0] in err_Li:
        print('err')
    else: pass

except : pass

try-except当 Julia 数据帧中不存在列名或Python 中是否存在等效函数时,如何进行控制流?

标签: dataframejulia

解决方案


由于您知道并期望您的某些数据框不会包含此列,因此在这种情况下通常最好使用普通控制流 ( if- else)。应为特殊情况保留例外。

在这种情况下,您可以在if语句中添加一个额外的条件,如下所示:

julia> df = DataFrame(id= "12345", description= rand(5));

julia> if columnindex(df, :id) > 0 && df[1, :id] in err_Li
           println("NOT VALID")
       end
NOT VALID

julia> df2 = DataFrame(blah= "13579", description= rand(5));

julia> if columnindex(df2, :id) > 0 && df2[1, :id] in err_Li
           println("NOT VALID")
       end

julia> 

columnindex是一个接受 DataFrame 和 Symbol ( :id) 的函数,如果 Symbol 与 DataFrame 中的列名不对应,则返回 0。如果:id在 DataFrame 中作为列存在,则columnindex返回该列的位置(从 1 开始),因此在这种情况下,结果将大于 0。因此,我们可以使用它来检查该列是否存在于我们的 DataFrame 中,并且仅在该列存在时才继续检查该值。


推荐阅读