J'ai créé un répertoire dans lequel stocker mes résultats. Mon code les stocke dans ce répertoire et l'enregistre dans un fichier CSV. Cependant, lorsque j'essaie de lire ce fichier CSV, je ne semble pouvoir le lire qu'en tant que DataFrame. Mais mon code ne fonctionne pas avec DataFrame, j'ai besoin du fichier CSV au format «dictionairy».

Je dois donc pouvoir télécharger le fichier CSV directement sous forme de dict

OU

Changez le DataFramefile en fichier dict.

Clarifier:

Voici à quoi ressemble le Dict lorsque je le crée, juste une simple chaîne comme entrée clé et une valeur qui lui est assignée:

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

Ensuite, je l'écris au format CSV et cela ressemble à ceci lorsque je le recharge en tant que DataFrame.

enter image description here

Je dois l'avoir comme avant de l'écrire au format CSV, tout comme le dictionairy que j'avais auparavant.

2
Alex 23 nov. 2020 à 14:48

2 réponses

Meilleure réponse

Extension de l'exemple @Bogumil.

Si votre fichier CSV a un formulaire

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

Alors tu peux juste faire

julia> using CSV

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

Au fait, ça marche aussi dans une autre direction

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
Andrej Oskin 23 nov. 2020 à 12:41

Voici une façon de convertir DataFrame en 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]

Et voici un exemple comment vous pouvez lire un fichier CSV dans un Dict sans utiliser DataFrames.jl:

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]
2
Bogumił Kamiński 23 nov. 2020 à 12:06