转换数据框架中的数据类型



我想更改列的数据类型,我已经尝试使用convert函数来实现这一点。

d = Dict("x" => [1,2,3,4,5],"y" => [6,7,8,9,10])    
df = DataFrame(d)
df[:,"x"] = convert.(Float64, df[:,"x"])

对于列x,这仍然产生一个类型为Int64的数据框但是,对列使用点表示法是成功的,

df.x = convert.(Float64, df.x)

从类型Int64转换为Float64成功!

但是在我的例子中,我想使用for循环转换列中的数据类型,所以我不得不使用第一种方法(可以想到一种使用点表示法的方法)。关于如何使用for循环转换数据类型,有什么想法吗?

for nm in names(df)
df[:, nm] = convert.(Float64, df[:,nm])
end

Try

df[!,"x"] = convert.(Float64, df[!,"x"])

注意"!"在括号中—这给了您实际的DataFrame列(类似于点表示法),而":"给出它的一个副本。

你也可以这样写:

julia> df = DataFrame(rand(1:10, 3, 4), :auto)
3×4 DataFrame
Row │ x1     x2     x3     x4
│ Int64  Int64  Int64  Int64
─────┼────────────────────────────
1 │     9      7      7     10
2 │     2      5      7     10
3 │     6      4      9      1
julia> transform!(df, names(df) .=> ByRow(Float64), renamecols=false)
3×4 DataFrame
Row │ x1       x2       x3       x4
│ Float64  Float64  Float64  Float64
─────┼────────────────────────────────────
1 │     9.0      7.0      7.0     10.0
2 │     2.0      5.0      7.0     10.0
3 │     6.0      4.0      9.0      1.0

相关内容

最新更新