将 Julia 数据框列从字符串转换为浮点型

Beb*_*bio 3 arrays dataframe julia

我尝试找到一种简单的方法将字符串类型的列转换为浮点数。

我尝试了一些:

df[!,x] = parse(Float64, df[!,y])
Run Code Online (Sandbox Code Playgroud)

但它不起作用。

如果您有任何想法,我将不胜感激

Bog*_*ski 6

你需要广播它(注意.后面的parse):

\n
julia> df = DataFrame(y = ["1", "2"])\n2\xc3\x971 DataFrame\n\xe2\x94\x82 Row \xe2\x94\x82 y      \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 1      \xe2\x94\x82\n\xe2\x94\x82 2   \xe2\x94\x82 2      \xe2\x94\x82\n\njulia> df.x = parse.(Float64, df.y)\n2-element Array{Float64,1}:\n 1.0\n 2.0\n\njulia> df\n2\xc3\x972 DataFrame\n\xe2\x94\x82 Row \xe2\x94\x82 y      \xe2\x94\x82 x       \xe2\x94\x82\n\xe2\x94\x82     \xe2\x94\x82 String \xe2\x94\x82 Float64 \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\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\xa4\n\xe2\x94\x82 1   \xe2\x94\x82 1      \xe2\x94\x82 1.0     \xe2\x94\x82\n\xe2\x94\x82 2   \xe2\x94\x82 2      \xe2\x94\x82 2.0     \xe2\x94\x82\n
Run Code Online (Sandbox Code Playgroud)\n

另一种使用方法transform!是(在这种情况下更详细):

\n
julia> transform!(df, :y => ByRow(x -> parse(Float64, x)) => :x)\n2\xc3\x972 DataFrame\n\xe2\x94\x82 Row \xe2\x94\x82 y      \xe2\x94\x82 x       \xe2\x94\x82\n\xe2\x94\x82     \xe2\x94\x82 String \xe2\x94\x82 Float64 \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\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\xa4\n\xe2\x94\x82 1   \xe2\x94\x82 1      \xe2\x94\x82 1.0     \xe2\x94\x82\n\xe2\x94\x82 2   \xe2\x94\x82 2      \xe2\x94\x82 2.0     \xe2\x94\x82\n
Run Code Online (Sandbox Code Playgroud)\n

如果您在上面的代码中替换了missing值,例如:yparsepassmissing(parse)

\n
df.x = passmissing(parse).(Float64, df.y)\n
Run Code Online (Sandbox Code Playgroud)\n