我想更改列的数据类型,我已经尝试使用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