Dataframe 转换数据帧中的数据类型
我想更改列的数据类型,我已经尝试使用Dataframe 转换数据帧中的数据类型,dataframe,julia,Dataframe,Julia,我想更改列的数据类型,我已经尝试使用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 但是,对列使用点表示法是成功的 df.x = convert.(Float64, df.x) 成功地
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
但是,对列使用点表示法是成功的
df.x = convert.(Float64, df.x)
成功地从类型Int64
转换为Float64
但在我的例子中,我想使用for循环来转换列中的数据类型,因此我不得不使用第一种方法(可以想出一种使用点表示法的方法)。关于如何使用for a循环转换数据类型的任何想法
for nm in names(df)
df[:, nm] = convert.(Float64, df[:,nm])
end
试一试
请注意括号中的“!”-这将为您提供实际的
数据帧列(类似于点符号),而“:”将提供它的副本。您也可以写:
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
不需要使用convert
。只要写Float64.(df.nm)
就行了。谢谢你的编辑,把它弄混了。
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