使用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)
现在,我尝试使用v0.6.4复制相同的内容,但出现错误:
ArgumentError:参数1缺少作业,年份和测试列,参数2缺少名称,年份和测试列,ID,名称和列作业缺少参数3
在没有运气的情况下,我试图深入阅读本文。 有人可以向我澄清一下吗?
答案 0 :(得分:5)
现在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 │
如果要避免修改原始DataFrames
,则应先复制它们。