csv - 在 julia 中将字典导出到 CSV 文件?
问题描述
我想知道,如何将嵌套dictionary
直接导出到CSV file
Julia 中?
例如:我有以下字典->
d = Dict(:a => Dict(:val1 => rand(4), :val2 => rand(450)),
:b => Dict(:val1 => rand(4), :val2 => rand(1500)));
问题是以下内容的大小不规则,因此难以转换为数据帧。导出此类不规则词典是否有任何直接替代方法。
谢谢!
解决方案
您可以将嵌套键更改为 CSV 文件的列,但这会浪费磁盘空间和内存,因为您随后会在每一行中重复所有键,每个底层数据只有一行:
using DataFrames
const d = Dict(:a => Dict(:val1 => rand(4), :val2 => rand(450)),
:b => Dict(:val1 => rand(4), :val2 => rand(1500)));
const alen, blen = 4 + 450, 4 + 1500
df = DataFrame(
letters = vcat(fill(:a, alen), fill(:b, blen)),
vals = vcat(fill(:val1, 4), fill(:val2, 450),
fill(:val1, 4), fill(:val2, 1500)),
rands = vcat(values(d[:a][:val1]), values(d[:a][:val2]),
values(d[:b][:val1]), values(d[:b][:val2]))
)
@show filter(r -> r.letters == :a && r.vals == :val1, df)
CSV.write(pathname, df)
这在您的示例中为每个随机值使用了几个额外的字节,因为每一行都有冗余条目,例如a,val1,
. 因此,出于空间原因,JLD2 会更好,除非您将 CSV 提供给需要该格式的程序。
推荐阅读
- sql - STRING_AGG 问题
- android - 无法将新值附加到列表
使用共享偏好。新值将是 String 类型 - jwt - OIDC JWT 身份声明(例如电话号码或电子邮件)可以是多个吗?
- android - Android Jetpack Paging 3:带 Room 的 PagingSource
- node.js - 如何在 60 天后的某个时间后在 mongoDB 服务器中自动运行某些东西并在没有任何用户交互的情况下更改文档的值
- docker - Kubernetes 应用服务,但端点没有
- cmake - cmake target_include_directories PUBLIC 不适用于对象库
- javascript - 如何从字符串中删除特定字母
- c# - PipeParser 无法解析 HL7 消息
- javascript - Discord Bot - 从网站下载 JSON 文件并提取其中的某些元素