Julia 缺少列时中断vcat上的更改

Julia 缺少列时中断vcat上的更改,julia,Julia,对于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中复制相同的内容,但得到

对于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中缺少列Job、Year和Test,参数2中缺少列Name、Year和Test,参数3中缺少列ID、Name和Job

我在阅读文档时试图弄清这件事的真相,但运气不好。
有人能向我澄清一下吗?

现在
DataFrames
中的
vcat
严格要求串联的
DataFrames
包含相同的列

如果在加载
DataFrames
包后阅读
vcat
的帮助,您将发现:

所有传递的数据帧中的列名必须相同,但顺序可以不同。在这种情况下,将使用第一次传递的
数据帧中的名称顺序

修复此问题的方法是向所有数据帧添加缺少的列。下面是如何在示例中就地执行此操作(注意,现在
missing
用于指示缺少的值):


如果你想避免修改原始的
数据帧
,你应该先复制它们。

现在
数据帧
中的
vcat
严格要求串联的
数据帧
包含相同的列

如果在加载
DataFrames
包后阅读
vcat
的帮助,您将发现:

所有传递的数据帧中的列名必须相同,但顺序可以不同。在这种情况下,将使用第一次传递的
数据帧中的名称顺序

修复此问题的方法是向所有数据帧添加缺少的列。下面是如何在示例中就地执行此操作(注意,现在
missing
用于指示缺少的值):


如果你想避免修改原始的
数据帧
,你应该先复制它们。

非常感谢@Bogumil Kaminski,它非常好用,而且非常干净!然而,我读到很多人担心vcat的性能,我可能需要为大约20列聚合数百万行。你认为我应该担心吗?有更好的方法吗?谢谢,洛蒂特应该很快,因为
vcat
只使用适当的目标大小分配一次结果,然后使用
copyto。您可能遇到的唯一问题是当您有数千个
DataFrames
vcat
时,因为splating是无效的(如果您有中等数量的甚至大的
DataFrames
都应该可以)。如果遇到这种情况,可以使用
数据帧。vcat
,它接受向量作为参数。这有点滥用,因为它没有导出,所以将来可能会在没有警告的情况下更改或删除它。您可以查看
\u vcat
的源代码,看看它是如何工作的。非常感谢@Bogumil Kaminski,它工作得非常好,而且非常干净!然而,我读到很多人担心vcat的性能,我可能需要为大约20列聚合数百万行。你认为我应该担心吗?有更好的方法吗?谢谢,洛蒂特应该很快,因为
vcat
只使用适当的目标大小分配一次结果,然后使用
copyto。您可能遇到的唯一问题是当您有数千个
DataFrames
vcat
时,因为splating是无效的(如果您有中等数量的甚至大的
DataFrames
都应该可以)。如果遇到这种情况,可以使用
数据帧。vcat
,它接受向量作为参数。这有点滥用,因为它没有导出,所以将来可能会在没有警告的情况下更改或删除它。您可以检查
\u vcat
的源代码以了解其工作原理。
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 │