行绑定Julia数据帧

时间:2015-12-18 03:14:06

标签: append dataframe julia

如何将一个数据框附加到另一个数据框,类似于SQL union或R' rbind

假设我的数据框AB定义如下。

A = DataFrame(x = [1, 2, 3], y = [4, 5, 6])
B = DataFrame(x = [4, 5, 6], y = [7, 8, 9])

解决这个问题的一种方法如下:

C = deepcopy(A)

for i = 1:size(B, 1)
    push!(C, Array(B[i,:]))
end

虽然这有效,但对我来说感觉有点笨拙。是否有更好或更惯用的方法来做到这一点?

3 个答案:

答案 0 :(得分:5)

数组连接[A;B]是将一个DataFrame的行添加到另一个的最简单方法:

julia> A = DataFrame(x = [1, 2, 3], y = [4, 5, 6]);
julia> B = DataFrame(x = [4, 5, 6], y = [7, 8, 9]);
julia> [A;B]
6x2 DataFrames.DataFrame
| Row | x | y |
|-----|---|---|
| 1   | 1 | 4 |
| 2   | 2 | 5 |
| 3   | 3 | 6 |
| 4   | 4 | 7 |
| 5   | 5 | 8 |
| 6   | 6 | 9 | 

答案 1 :(得分:0)

您还可以执行vcat(A,B)将两个数据帧附加在一起。

如果数据帧位于数组中,则可以使用像...这样的splat运算符(vcat(AB...)

答案 2 :(得分:0)

我有同样的问题。事实证明,使用append!函数是一种更有效的方法:

append!(A,B)

这将修改原始数据帧A。如果要创建新的数据框,可以执行以下操作:

C = deepcopy(A)
append!(C,B)

请注意,此解决方案比执行C=vcat(A,B)更为有效。运行以下代码以观察内存分配。

A = DataFrame(x = [1, 2, 3], y = [4, 5, 6])
B = DataFrame(x = [4, 5, 6], y = [7, 8, 9])

## method 1: deepcopy append!
@time let 
        C=deepcopy(A)
        append!(C,B)
end

## method 2: vcat
@time vcat(A,B)

## method 3: modifies A
@time append!(A,B)

我分别找到(27个分配:2.063 KiB),(78个分配:5.750 KiB)和(8个分配:352字节)。