Julia循环DataFrame向量得到嵌套向量,如何转为DataFrame?
将Vector{Vector}转换为指定结构的DataFrame(Julia)
问题背景
使用列表推导式[mydfbase.a .- dfx.a for dfx in MyDFvector]处理DataFrame向量后,得到类型为Vector{Vector{Int64}}的结果,需要将其转换为与mydfWant结构一致的DataFrame(每行对应原向量的相同索引元素,每列对应原列表推导式的一个结果向量)。
可复现代码:
using DataFrames # 创建示例DataFrame mydfbase = DataFrame(a=[41, 41, 41, 41, 41, 41]) mydf1 = DataFrame(a=1:6) mydf2 = DataFrame(a=7:12) mydf3 = DataFrame(a=13:18) # 存入向量 MyDFvector = [mydf1, mydf2, mydf3] # 计算差值得到Vector{Vector} RawDiff = [mydfbase.a .- dfx.a for dfx in MyDFvector] # 目标结构的DataFrame示例 mydfWant = DataFrame(a=[40, 39, 38, 37, 36, 35], b=[34, 33, 32, 31, 30, 29], c=[28, 27, 26, 25, 24, 23])
解决方法
方法1:直接用DataFrame构造函数转换
利用DataFrame的构造特性,将RawDiff中的每个子向量作为一列传入,同时指定自定义列名:
mydfResult = DataFrame(RawDiff, [:a, :b, :c])
方法2:先拼接为矩阵再转换
先通过hcat(RawDiff...)将向量的向量拼接为二维矩阵,再构造DataFrame并指定列名:
mydfResult = DataFrame(hcat(RawDiff...), [:a, :b, :c])
方法3:一步生成目标DataFrame
跳过中间变量RawDiff,直接在构造DataFrame时完成计算:
mydfResult = DataFrame([mydfbase.a .- dfx.a for dfx in MyDFvector], [:a, :b, :c])
以上三种方法生成的mydfResult结构与mydfWant完全一致,输出结果如下:
6×3 DataFrame Row │ a b c │ Int64 Int64 Int64 ─────┼───────────────────── 1 │ 40 34 28 2 │ 39 33 27 3 │ 38 32 26 4 │ 37 31 25 5 │ 36 30 24 6 │ 35 29 23
内容的提问来源于stack exchange,提问作者donPablo
相关产品推荐
相关产品推荐

