【问题标题】:Read CSV file to dictionairy将 CSV 文件读入字典
【发布时间】:2021-03-06 03:12:21
【问题描述】:

我创建了一个字典来存储我的结果。我的代码将它们存储在这个字典中,并将其保存到一个 CSV 文件中。但是,当我尝试读取此 CSV 文件时,我似乎只能将其作为 DataFrame 读取。但我的代码不适用于 DataFrame,我需要“字典”格式的 CSV 文件。

所以我必须能够将 CSV 文件直接下载为字典

将 DataFramefile 更改为 dict 文件。

澄清一下:

这就是我创建 Dict 时的样子,只是一个简单的字符串作为键输入和分配给它的值:

Dict{String,Any} with 2 entries:
"0.1_10_8" => 13.2
"0.1_10_4" => 6.6

然后我把它写成 CSV 格式 当我将它作为 DataFrame 重新加载时,它看起来像这样。

我需要让它和我之前写成 CSV 之前的一样,就像我以前的字典一样。

【问题讨论】:

    标签: dataframe csv dictionary julia


    【解决方案1】:

    扩展@Bogumil 示例。

    如果您的 CSV 文件有表单

    key, value
    A, 1
    B, 10
    C, 15
    

    那么你就可以了

    julia> using CSV
    
    julia> CSV.File("example.csv") |> Dict
    Dict{String, Int64} with 3 entries:
      "B" => 10
      "A" => 1
      "C" => 15
    

    顺便说一句,它也适用于其他方向

    julia> d = Dict("a" => 1, "b" => 2, "c" => 3)
    julia> CSV.write("dict.csv", d)
    
    sh> cat dict.csv
    first,second
    c,3
    b,2
    a,1
    

    【讨论】:

      【解决方案2】:

      这是一种将DataFrame 转换为Dict 的方法:

      julia> using DataFrames
      
      julia> df = DataFrame(rand(2,3), :auto)
      2×3 DataFrame
       Row │ x1         x2         x3
           │ Float64    Float64    Float64
      ─────┼────────────────────────────────
         1 │ 0.872404   0.90496    0.675698
         2 │ 0.0819708  0.0460276  0.814274
      
      julia> Dict(pairs(eachcol(df)))
      Dict{Symbol,AbstractArray{T,1} where T} with 3 entries:
        :x2 => [0.90496, 0.0460276]
        :x3 => [0.675698, 0.814274]
        :x1 => [0.872404, 0.0819708]
      

      这是一个示例,您如何在不使用 DataFrames.jl 的情况下将 CSV 文件读入Dict

      julia> using CSV, Tables
      
      julia> CSV.write("test.txt", df) # I use df created above
      "test.txt"
      
      julia> CSV.File("test.txt") |> Tables.columntable |> pairs |> Dict
      Dict{Symbol,Array{Float64,1}} with 3 entries:
        :x2 => [0.90496, 0.0460276]
        :x3 => [0.675698, 0.814274]
        :x1 => [0.872404, 0.0819708]
      

      【讨论】:

      • 对不起,我需要指定,我需要能够通过字符串调用键,键存储在“第一”列,值存储在“第二”。我认为这种方式是对我输入的内容进行“转置”..
      • 您能否用预期输入和输出的可重现示例更新问题?然后我可以帮助你提出如何做到这一点。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 2018-03-19
      相关资源
      最近更新 更多