gpt4 book ai didi

dataframe - 使用列选择器 (Cols) 转换数据框列失败

转载 作者:行者123 更新时间:2023-12-04 07:13:43 27 4
gpt4 key购买 nike

我想知道为什么我不能在 transform 中使用 Cols 列选择器来更改数据框列。例如:

df = DataFrame(x = 1:5, y = 6:10)
transform(df, [:x, :y] .=> v -> v .+ 100) # OK
df[!, Cols(1:2)] .= df[!, Cols(1:2)] .+ 100 # OK

transform(df, Cols(1:2) .=> v -> v .+ 100) # MethodError: no method matching length(::Cols{Tuple{UnitRange{Int64}}})

我在 DataFrames 文档中读到了列选择器,例如 ColsBetweenNot , 和 All 可以在 transform 等中使用,但我仍然收到此错误。

感谢您的指点。

最佳答案

这些选择器可以在直接传递给transform时使用。在这里,您使用了 .=> 的广播(注意点),因此您没有将它们直接传递给 transform,而是尝试传递以下内容:

julia> Cols(1:2) .=> v -> v .+ 100
ERROR: MethodError: no method matching length(::Cols{Tuple{UnitRange{Int64}}})

您观察到的错误不是由 DataFrames.jl 发出的,而是由 Julia base 发出的。

您需要做的是使用 names 使事情正常进行:

julia> names(df, Cols(1:2)) .=> v -> v .+ 100
2-element Vector{Pair{String, var"#7#8"}}:
"x" => var"#7#8"()
"y" => var"#7#8"()

因此以下工作:

 transform(df, names(df, Cols(1:2)) .=> v -> v .+ 100)

将来可能会添加您请求的功能,但需要更改 DataAPI.jl,请参阅 here .


编辑

正如 DataFrames.jl 1.3 中的原始答案所示,功能已添加,现在您可以执行 transform(df, Cols(1:2) .=> v -> v .+ 100)没有错误。参见 https://bkamins.github.io/julialang/2021/12/17/selectors.html了解它现在是如何工作的。

关于dataframe - 使用列选择器 (Cols) 转换数据框列失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68905010/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com