在Julia中遍历列

4

我想在DataFrame的所有列中添加一个数字。我尝试使用以下代码:

for i in names(df)
    df.i = df.i .+ 1
end

但是出现了错误,提示为“ArgumentError: 在数据帧中未找到列名:i”。如有任何帮助,将不胜感激。提前感谢您的帮助。
1个回答

9

DataFrames.jl 1.0及更高版本的当前建议

只需写下:

df .+= 1

让您得到想要的。

如果您想遍历列,也是支持的。以下是一些示例:

for n in names(df)
    df[!, n] .+= 1
end

for col in eachcol(df)
    col .+= 1
end

DataFrames.jl 1.0版本发布前的旧建议

目前您可以使用以下方法:

for i in axes(df, 2)
    df[i] .+= 1
end

或者

for n in names(df)
    df[n] .+= 1
end

然而,在未来,您可能需要编写以下内容(目前正在讨论是否更改单参数索引的含义):

for col in eachcol(df, false)
    col .+= 1
end

或者

foreach(x -> x .+= 1, eachcol(df, false))

这个有更新吗?我正在尝试生成以下类似的新列,但是遇到了相似的错误for i = 1:n df.x_$i .= (df.x$i .- df.x$(i - 1)) ./ df.x_$i end - Moshi
是的 - 这个建议是针对 DataFrames.jl 在其 1.0 版本发布之前的。我添加了当前编写此代码的方式(这在未来不会改变)。 - Bogumił Kamiński
谢谢Bogumil。我的问题略有不同,我正在尝试使用迭代创建列。目标是创建x_1、x_2和x_3三列,它们是(x_0, x_1)、(x_1, x_2)和(x_2, x_3)的函数。这就是我在上面评论中尝试使用循环实现的内容。不幸的是,显式定义每个而不是在循环中迭代它并不是一个好的选择,因为这是一个函数的一部分,该函数将作为参数之一传递要创建的列集合。 - Moshi
1
你的代码应该是 for i = 1:n df[!, "x_$i"] = (df[!, "x$i"] .- df[!, "x$(i - 1)"]) ./ df[!, "x_$i"] end - Bogumił Kamiński

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