通过引用组合Julia Dataframes,而不是复制

时间:2017-08-31 13:27:57

标签: pointers dataframe julia

在Julia中,您可以组合数据框:

d1 = DataFrame(A=1:10)
d2 = DataFrame(A=11:20)

d3 = [d1; d2]

然而,这似乎将d1,d2复制到d3中。我不想复制它们。如果对d1进行修改,则不会反映在d3中。

任何人都知道如何通过引用而不是值来组合它们,这样如果修改了d1,那么更改会反映在d3中吗?

谢谢!

1 个答案:

答案 0 :(得分:3)

在数组类型术语中,您希望d1d2成为d3中数据的视图。 DataFrames也可以这样做:

julia> using DataFrames

julia> d3 = DataFrame(A=1:20);

julia> d1 = view(d3,1:10);

julia> d2 = view(d3,11:20);

julia> d1[1:3,:]
3×1 DataFrames.DataFrame
│ Row │ A │
├─────┼───┤
│ 1   │ 1 │
│ 2   │ 2 │
│ 3   │ 3 │

julia> d3[1:3,:]
3×1 DataFrames.DataFrame
│ Row │ A │
├─────┼───┤
│ 1   │ 1 │
│ 2   │ 2 │
│ 3   │ 3 │

julia> d1[1,:A] = 999
999

julia> d3[1:3,:]
3×1 DataFrames.DataFrame
│ Row │ A   │
├─────┼─────┤
│ 1   │ 999 │
│ 2   │ 2   │
│ 3   │ 3   │

当然,您可能首先要创建d1d2,然后将它们合并到d3,但这需要复制操作(使列在内存中连续) )。之后,您可以生成视图(并将其分配给d1d2)。可能会建议为视图使用不同的变量,因为更改d1d2的类型可能会导致类型不稳定(Julia中的错误)。