DataFrame字符串值的明显问题

时间:2018-09-23 15:26:27

标签: variables dataframe reference julia

我不确定这是一个实际问题还是我只是没有以正确的方式做某事,但此刻对我来说似乎有些奇怪。

使用DataFrames时遇到一个问题,如果您将DataFrame复制到另一个变量,则对两个变量中的任何一个进行的更改都会同时更改。这也适用于各个列。例如:

julia> x = DataFrame(A = ["pink", "blue", "green"], B = ["yellow", "red", "purple"]);
julia> y = x;
julia> x[x.A .== "blue", :A] = "red";
julia> x
3×2 DataFrame
│ Row │ A     │ B      │
├─────┼───────┼────────┤
│ 1   │ pink  │ yellow │
│ 2   │ red   │ red    │
│ 3   │ green │ purple │

julia> y
3×2 DataFrame
│ Row │ A     │ B      │
├─────┼───────┼────────┤
│ 1   │ pink  │ yellow │
│ 2   │ red   │ red    │
│ 3   │ green │ purple │

列也发生类似的情况,因此,如果要像上面那样设置DataFrame,但是在将两者都合并到数据帧中之前先使用B = A,那么如果列中的值是更改,另一个也会自动更改。

这对我来说似乎很奇怪,也许这是其他编程语言的功能,但是在备份数据表或在列之间交换数据时,我在R中做了很多与上述相同的事情,并且从未见过这个问题。所以问题是,它是否按设计工作,是否有在数据帧之间复制值的正确方法?

我使用的是Julia版本0.7.0,因为我最初是通过Manjaro存储库安装的1.0.0,并且在尝试构建Tk时遇到Is_windows()问题。

1 个答案:

答案 0 :(得分:1)

命令y = x不会创建新对象;只会为相同的DataFrame创建一个新的引用(或名称)。

您可以通过调用y = copy(x)来创建副本。对于您而言,这仍然不起作用,因为它仅复制数据框本身,而不复制其中的变量。

如果您想要一个完全独立的新对象,可以使用y = deepcopy(x)。在这种情况下,y将没有对x的引用。

请参阅此主题以进行更详细的讨论:

https://discourse.julialang.org/t/what-is-the-difference-between-copy-and-deepcopy/3918/2