# Way to store dict of DataFrame tables in a single file?

**URL:** <https://discourse.julialang.org/t/way-to-store-dict-of-dataframe-tables-in-a-single-file/15318>\
**Category:** General Usage\
**Tags:** question\
**Created:** [September 21, 2018, 9:02pm UTC](https://discourse.julialang.org/t/way-to-store-dict-of-dataframe-tables-in-a-single-file/15318 "2018-09-21T21:02:34Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![djsegal](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/djsegal/32/13752_2.png) [@djsegal](https://discourse.julialang.org/u/djsegal)\
**Post date:** [September 21, 2018, 9:02pm UTC](https://discourse.julialang.org/t/way-to-store-dict-of-dataframe-tables-in-a-single-file/15318/1 "2018-09-21T21:02:34Z")

</div>

From the DataFrame [docs](http://juliadata.github.io/DataFrames.jl/stable/man/getting_started.html#Importing-and-Exporting-Data-(I/O)-1), they say the best way to store DataFrames is through a CSV:

```julia
using DataFrames
using CSV

df = DataFrame(x = 1, y = 2)
CSV.write(output, df)

```

* * *

However, let’s say you want to have:

- a dictionary of DataFrames (akin to sheets in an excel file)
- that you save in a single file (so you don’t have like 50 of them)

How would you get the following code to not error out?

```julia
df = DataFrame(x = [1,2,3], y = [2,2,2])
dg = DataFrame(x = [4,0,4], y = [0,1,3])
dh = DataFrame(x = [4,2,1], y = [1,0,1])

cur_dict = Dict(
    :f => df,
    :g => dg,
    :h => dh
)
CSV.write("woof.csv", cur_dict)

```

```julia
MethodError: no method matching schema(::Dict{Symbol,DataFrames.DataFrame})
Closest candidates are:
  schema(::S, ::DataStreams.Data.Query{code,columns,e,limit,offset}) where {code, S, columns, e, limit, offset} at /Users/dan/.julia/v0.6/DataStreams/src/query.jl:217
  schema(::S, ::DataStreams.Data.Query{code,columns,e,limit,offset}, ::Any) where {code, S, columns, e, limit, offset} at /Users/dan/.julia/v0.6/DataStreams/src/query.jl:217
  schema(::DataFrames.DataFrame) at /Users/dan/.julia/v0.6/DataFrames/src/abstractdataframe/io.jl:224
  ...

Stacktrace:
 [1] #stream!#120(::Bool, ::Dict{Int64,Function}, ::Function, ::Array{Any,1}, ::Array{Any,1}, ::Void, ::Void, ::Array{Any,1}, ::DataStreams.Data.#stream!, ::Dict{Symbol,DataFrames.DataFrame}, ::Type{CSV.Sink}, ::String, ::Vararg{String,N} where N) at /Users/dan/.julia/v0.6/DataStreams/src/query.jl:544
 [2] (::DataStreams.Data.#kw##stream!)(::Array{Any,1}, ::DataStreams.Data.#stream!, ::Dict{Symbol,DataFrames.DataFrame}, ::Type{CSV.Sink}, ::String) at ./<missing>:0
 [3] #write#53(::Bool, ::Dict{Int64,Function}, ::Array{Any,1}, ::Function, ::String, ::Dict{Symbol,DataFrames.DataFrame}) at /Users/dan/.julia/v0.6/CSV/src/Sink.jl:136
 [4] write(::String, ::Dict{Symbol,DataFrames.DataFrame}) at /Users/dan/.julia/v0.6/CSV/src/Sink.jl:136
 [5] include_string(::String, ::String) at ./loading.jl:522

```

* * *

**edit:** would be ok with json, xml, or w/e for storage type too

---

<div class="post-metadata">

**Author:** ![pdeffebach](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/pdeffebach/32/10320_2.png) [@pdeffebach](https://discourse.julialang.org/u/pdeffebach)\
**Post date:** [September 21, 2018, 9:08pm UTC](https://discourse.julialang.org/t/way-to-store-dict-of-dataframe-tables-in-a-single-file/15318/2 "2018-09-21T21:08:05Z")

</div>

Is there any reason you want to have it all in a single CSV? You could do this.

```julia
for (key, data) in cur_dict
    CSV.write("$key", data)
end

```

---

<div class="post-metadata">

**Author:** ![dpsanders](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dpsanders/32/3573_2.png) [@dpsanders](https://discourse.julialang.org/u/dpsanders)\
**Post date:** [September 21, 2018, 9:42pm UTC](https://discourse.julialang.org/t/way-to-store-dict-of-dataframe-tables-in-a-single-file/15318/3 "2018-09-21T21:42:38Z")

</div>

Use JLD2.jl or BSON.jl.
