如何在 Julia 数据帧上进行就地广播操作?

All*_*ate 2 dataframe julia

我有一个包含单列“名称”的数据框,我想就地小写该值。

\n

现有的小写广播似乎创建了一个新的数据帧,我该如何将其作为就地修改?

\n
julia> df\n5\xc3\x971 DataFrame\n\xe2\x94\x82 Row \xe2\x94\x82 Name      \xe2\x94\x82\n\xe2\x94\x82     \xe2\x94\x82 String    \xe2\x94\x82\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4\n\xe2\x94\x82 1   \xe2\x94\x82 Mary      \xe2\x94\x82\n\xe2\x94\x82 2   \xe2\x94\x82 Anna      \xe2\x94\x82\n\xe2\x94\x82 3   \xe2\x94\x82 Emma      \xe2\x94\x82\n\xe2\x94\x82 4   \xe2\x94\x82 Elizabeth \xe2\x94\x82\n\xe2\x94\x82 5   \xe2\x94\x82 Minnie    \xe2\x94\x82\n\njulia> lowercase.(df.Name)\n5-element Array{String,1}:\n "mary"\n "anna"\n "emma"\n "elizabeth"\n "minnie"\n\njulia> df\n5\xc3\x971 DataFrame\n\xe2\x94\x82 Row \xe2\x94\x82 Name      \xe2\x94\x82\n\xe2\x94\x82     \xe2\x94\x82 String    \xe2\x94\x82\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4\n\xe2\x94\x82 1   \xe2\x94\x82 Mary      \xe2\x94\x82\n\xe2\x94\x82 2   \xe2\x94\x82 Anna      \xe2\x94\x82\n\xe2\x94\x82 3   \xe2\x94\x82 Emma      \xe2\x94\x82\n\xe2\x94\x82 4   \xe2\x94\x82 Elizabeth \xe2\x94\x82\n\xe2\x94\x82 5   \xe2\x94\x82 Minnie    \xe2\x94\x82\n
Run Code Online (Sandbox Code Playgroud)\n

Bog*_*ski 5

以下是三个基本选项:

\n
julia> df = DataFrame(Name = ["Mary", "Anna", "Emma"]);\n\njulia> @. df.Name = lowercase(df.Name); # work on a single column in place\n\njulia> df\n3\xc3\x971 DataFrame\n\xe2\x94\x82 Row \xe2\x94\x82 Name   \xe2\x94\x82\n\xe2\x94\x82     \xe2\x94\x82 String \xe2\x94\x82\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4\n\xe2\x94\x82 1   \xe2\x94\x82 mary   \xe2\x94\x82\n\xe2\x94\x82 2   \xe2\x94\x82 anna   \xe2\x94\x82\n\xe2\x94\x82 3   \xe2\x94\x82 emma   \xe2\x94\x82\n\njulia> df = DataFrame(Name = ["Mary", "Anna", "Emma"]);\n\njulia> @. df = lowercase.(df); # work on a whole data frame in place\n\njulia> df\n3\xc3\x971 DataFrame\n\xe2\x94\x82 Row \xe2\x94\x82 Name   \xe2\x94\x82\n\xe2\x94\x82     \xe2\x94\x82 String \xe2\x94\x82\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4\n\xe2\x94\x82 1   \xe2\x94\x82 mary   \xe2\x94\x82\n\xe2\x94\x82 2   \xe2\x94\x82 anna   \xe2\x94\x82\n\xe2\x94\x82 3   \xe2\x94\x82 emma   \xe2\x94\x82\n\njulia> df = DataFrame(Name = ["Mary", "Anna", "Emma"]);\n\njulia> transform!(df, :Name => ByRow(lowercase) => :Name); # this time the column gets replaced instead of in-place modified\n\njulia> df\n3\xc3\x971 DataFrame\n\xe2\x94\x82 Row \xe2\x94\x82 Name   \xe2\x94\x82\n\xe2\x94\x82     \xe2\x94\x82 String \xe2\x94\x82\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4\n\xe2\x94\x82 1   \xe2\x94\x82 mary   \xe2\x94\x82\n\xe2\x94\x82 2   \xe2\x94\x82 anna   \xe2\x94\x82\n\xe2\x94\x82 3   \xe2\x94\x82 emma   \xe2\x94\x82\n
Run Code Online (Sandbox Code Playgroud)\n

  • 它将广播应用于表达式中的所有函数调用,因此例如在最上面的示例中,它与“df.Name .= lowercase.(df.Name)”相同。 (2认同)