Row bind Julia data frames
I had the same question. It turns out there is a more efficient way by using the append!
function:
append!(A,B)
This modifies the original dataframe A
. If you want to create a new dataframe, you can do:
C = deepcopy(A)
append!(C,B)
Note this solution is more efficient that doing C=vcat(A,B)
. Run the following code to observe memory allocation.
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)
I find respectively (27 allocations: 2.063 KiB), (78 allocations: 5.750 KiB) and (8 allocations: 352 bytes).
Also you can do vcat(A,B)
to append two dataframes together.
If your dataframes are in an array then using the splat operator (...
) like this vcat(AB...)
would also work
Array concatenation [A;B]
is the simplest way to add rows of one DataFrame
to another:
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 |