如何在Julia Dataframe中添加新列

8
假设我有一个数据框和一个向量,如下所示:
dataframe = DataFrame(Data1 = rand(10), Data2 = rand(10));
Data3 = rand(10)

我想将Data3添加到数据框中,例如:
    Data1       Data2     Data3
    Float64     Float64   Float64
1   0.757345    0.903133  0.502133
2   0.294749    0.327502  0.323133
3   0.156397    0.427323  0.123133

在Python中,我可以使用df["Data3"] = Data3来添加新列,但在Julia数据帧中,df[!,Data3] = Data3会返回:
MethodError: no method matching setindex!(::DataFrame, ::Vector{Float64}, ::typeof(!), ::Vector{Float64})。 同时,我已经查看了这个解决方案,但是它给出了以下错误:
ArgumentError: syntax df[column] is not supported use df[!, column] instead。 如何在Julia数据框中添加向量作为新列?
1个回答

12
你差一点就到了,你正在寻找的是:
dataframe[!, :Data3] = Data3

或者

dataframe[!, "Data3"] = Data3

或者

dataframe.Data3 = Data3

请注意,我在这里使用的是SymbolString - [!, :Data3]是一个索引操作,因此它需要一个行(!)和列(:Data3)索引的标识符,您希望将数据存储在哪里,而不是数据本身。
您正在将实际数据(一个包含10个随机数的向量)绑定到变量Data3,因此使用变量Data3(而不是具有值"Data3"SymbolString)执行dataframe[!, Data3]等同于执行以下操作
dataframe[!, rand(10)]

这意味着“我想访问DataFrame的所有行(!),并且使用10个随机数标识的10列”。现在,通过一个随机浮点数进行索引并没有太多意义(dataframe[!, 0.532]应该返回什么?),这就是为什么你看到的错误-setindex不接受Vector{Float}作为参数。
关于你提供的Discourse线程,它非常古老,df["col"]语法早已被弃用。在DataFrames中,基本的索引概念是DataFrame是一个二维数据结构,因此应该通过df[row_indices, col_indices]进行索引。 DataFrames支持多种指定有效索引的方式,这里无法详细介绍,但可以在文档here中找到列表。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接