使用Julia 0.5时,我经常这样做:
A = DataFrame(ID = [20,40], Name = ["John Doe", "Jane Doe"])
B = DataFrame(ID = [60,80], Job = ["Sailor", "Sommelier"])
C = DataFrame(Year = [1978, 1982], Test = ["Something", "Somewhere"])
vcat(A,B,C)
Run Code Online (Sandbox Code Playgroud)
现在,我尝试使用v0.6.4复制相同内容,但出现错误:
ArgumentError:参数1缺少列Job,Year和Test,参数2缺少列Name,Year和Test,并且ID,Name和Job列缺失来自论点3
我没有任何运气就试图深入阅读本文。有人可以向我澄清一下吗?
现在,vcat
在DataFrames
严格的事实,级联DataFrames
包含相同的列。
如果您vcat
在加载DataFrames
程序包后阅读的帮助,则会发现:
所有传递的数据帧中的列名必须相同,但它们可以具有不同的顺序。在这种情况下,将使用第一个传递的名称顺序
DataFrame
。
解决该问题的方法是将缺少的列添加到所有数据框。您可以在示例中按以下步骤进行操作(请注意,尽管现在该missing
操作用于指示缺少的值):
julia> for n in unique([names(A); names(B); names(C)]), df in [A,B,C]
n in names(df) || (df[n] = missing)
end
julia> [A; B; C]
6×5 DataFrames.DataFrame
? Row ? ID ? Name ? Job ? Year ? Test ?
??????????????????????????????????????????????????????????????
? 1 ? 20 ? John Doe ? missing ? missing ? missing ?
? 2 ? 40 ? Jane Doe ? missing ? missing ? missing ?
? 3 ? 60 ? missing ? Sailor ? missing ? missing ?
? 4 ? 80 ? missing ? Sommelier ? missing ? missing ?
? 5 ? missing ? missing ? missing ? 1978 ? Something ?
? 6 ? missing ? missing ? missing ? 1982 ? Somewhere ?
Run Code Online (Sandbox Code Playgroud)
如果要避免修改原件DataFrames
,则应先复制它们。