如何在 Julia Dataframe 中添加新列

Aft*_*ray 9 dataframe julia

假设我有数据框和向量,例如:

dataframe = DataFrame(Data1 = rand(10), Data2 = rand(10));
Data3 = rand(10)
Run Code Online (Sandbox Code Playgroud)

我想添加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
Run Code Online (Sandbox Code Playgroud)

在 Python 中,我可以只df["Data3"] = Data3添加列,但在 Julia 数据框中,df[!,Data3] = Data3返回:

  • MethodError: 没有方法匹配 setindex!(::DataFrame, ::Vector{Float64}, ::typeof(!), ::Vector{Float64})

我也检查了这个解决方案,但这给了我:

  • ArgumentError:不支持语法 df[column],请改用 df[!, column]

如何在 Julia Dataframe 中添加向量作为新列?

Nil*_*dat 13

您就快到了,您正在寻找:

dataframe[!, :Data3] = Data3
Run Code Online (Sandbox Code Playgroud)

或者

dataframe[!, "Data3"] = Data3
Run Code Online (Sandbox Code Playgroud)

或者

dataframe.Data3 = Data3
Run Code Online (Sandbox Code Playgroud)

请注意,我在这里使用了Symbolor String- 这是一个索引操作,因此它需要您想要存储数据的[!, :Data3]行 ( !) 和列 ( ) 索引的标识符,而不是数据本身。:Data3

您将实际数据(随机数的 10 元素向量)绑定到变量Data3,因此使用dataframe[!, Data3]变量Data3(而不是使用 aSymbolString"Data3")相当于执行

dataframe[!, rand(10)]
Run Code Online (Sandbox Code Playgroud)

这意味着“我想访问!DataFrame 的所有行 ( ),以及由 10 个随机数标识的 10 列”。现在,按随机浮点数进行索引没有多大意义(应该dataframe[!, 0.532]返回什么?),这就是为什么您会收到您看到的错误 -setindex不接受 aVector{Float}作为参数。

关于您链接的 Discourse 线程,它非常旧,并且df["col"]语法很久以前就已被弃用。中的基本索引概念DataFrames是 aDataFrame是二维数据结构,因此应该通过 进行索引df[row_indices, col_indices]

DataFrames支持多种指定有效索引的方法,这些方法太多,无法在此处详细介绍,但在此处的文档中列出了。