Julia Dataframe 以纯格式写入csv

wlwcrazw  于 2023-01-06  发布在  其他
关注(0)|答案(1)|浏览(125)

尝试将变量写入数据库并保存为csv时,我发现像x = 1.2345这样的简单变量是以这种格式编写的:默认情况下,将{Any,Any}(“x”,1.234)配对到csv文件中。
在某些示例中(如https://www.geeksforgeeks.org/working-with-csv-files-in-julia/),写入数据时不包含类型信息。
下面是我的代码:

using DataFrames
using CSV   

function pushDbVals!(df,names,vals)
    if (length(names)!=length(vals))
       error("length(names)!=length(vals): ", length(names),"!=", length(vals))
    end
    row = []
    for d in vals 
        push!(row,d)
    end
    push!(df,row)
    
end

x = 1.234

dbNames = ["x"]
vals = Dict()
vals["x"] = x

println("x: ", x)

df = DataFrame([ name =>[] for name in dbNames])
pushDbVals!(df,dbNames,vals)
CSV.write("test.csv", df)
zwghvu4y

zwghvu4y1#

原因是操作后的数据框不存储浮点数,而是存储对。请参阅:

julia> df
1×1 DataFrame
 Row │ x
     │ Any
─────┼────────────────────────────
   1 │ Pair{Any, Any}("x", 1.234)

您很可能需要以下内容:

julia> df = DataFrame([ name =>[] for name in dbNames])
0×1 DataFrame
 Row │ x
     │ Any
─────┴─────

julia> push!(df, vals)
1×1 DataFrame
 Row │ x
     │ Any
─────┼───────
   1 │ 1.234

正如你所看到的,DataFrames.jl已经支持将行推送到你最想要的 Dataframe 中。(请检查DataFramecolspromote kwargs,因为它们允许你根据你的需要微调push!的行为)

相关问题