假设我有 3 个 DataFrame。其中一个 DataFrame 的列名不在其他两个 DataFrame 中。
using DataFrames
df1 = DataFrame([['a', 'b', 'c'], [1, 2, 3]], ["name", "id"])
df2 = DataFrame([['d', 'e', 'f'], [4, 5, 6]], ["name", "id"])
df3 = DataFrame([['x', 'y', 'z'], [7, 8, 9], [11, 22, 33]], ["name", "id", "num"])
Run Code Online (Sandbox Code Playgroud)
每个 DataFrame 都是 Vector 的一个元素。
dfs = [df1, df2, df3]
Run Code Online (Sandbox Code Playgroud)
我想将所有这些 DataFrame 组合成一个大 DataFrame。这是我尝试过的:
df = reduce(x -> vcat(x, cols=:union), dfs)
# MethodError: no method matching (::var"#55#56")(::DataFrame, ::DataFrame)
Run Code Online (Sandbox Code Playgroud)
那么,我该如何在 Julia 中做到这一点呢?
加分点:我可以在没有 DataFrames.jl 的基础 Julia 中执行此操作(注意:df3比其他列有更多列)吗?
由于有大量的 Julia 包实现了类似 DataFrame 的构造,因此我愿意接受使用 DataFrames.jl 以外的包的解决方案。
这是我在 R 中的做法:
using DataFrames
df1 = DataFrame([['a', 'b', 'c'], [1, 2, 3]], ["name", "id"])
df2 = DataFrame([['d', 'e', 'f'], [4, 5, 6]], ["name", "id"])
df3 = DataFrame([['x', 'y', 'z'], [7, 8, 9], [11, 22, 33]], ["name", "id", "num"])
Run Code Online (Sandbox Code Playgroud)
和 Python 3.7:
dfs = [df1, df2, df3]
Run Code Online (Sandbox Code Playgroud)
做就是了:
\n\njulia> vcat(dfs..., cols=:union)\n9\xc3\x973 DataFrame\n\xe2\x94\x82 Row \xe2\x94\x82 name \xe2\x94\x82 id \xe2\x94\x82 num \xe2\x94\x82\n\xe2\x94\x82 \xe2\x94\x82 Char \xe2\x94\x82 Int64 \xe2\x94\x82 Int64? \xe2\x94\x82\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4\n\xe2\x94\x82 1 \xe2\x94\x82 'a' \xe2\x94\x82 1 \xe2\x94\x82 missing \xe2\x94\x82\n\xe2\x94\x82 2 \xe2\x94\x82 'b' \xe2\x94\x82 2 \xe2\x94\x82 missing \xe2\x94\x82\n\xe2\x94\x82 3 \xe2\x94\x82 'c' \xe2\x94\x82 3 \xe2\x94\x82 missing \xe2\x94\x82\n\xe2\x94\x82 4 \xe2\x94\x82 'd' \xe2\x94\x82 4 \xe2\x94\x82 missing \xe2\x94\x82\n\xe2\x94\x82 5 \xe2\x94\x82 'e' \xe2\x94\x82 5 \xe2\x94\x82 missing \xe2\x94\x82\n\xe2\x94\x82 6 \xe2\x94\x82 'f' \xe2\x94\x82 6 \xe2\x94\x82 missing \xe2\x94\x82\n\xe2\x94\x82 7 \xe2\x94\x82 'x' \xe2\x94\x82 7 \xe2\x94\x82 11 \xe2\x94\x82\n\xe2\x94\x82 8 \xe2\x94\x82 'y' \xe2\x94\x82 8 \xe2\x94\x82 22 \xe2\x94\x82\n\xe2\x94\x82 9 \xe2\x94\x82 'z' \xe2\x94\x82 9 \xe2\x94\x82 33 \xe2\x94\x82\nRun Code Online (Sandbox Code Playgroud)\n\n或者
\n\njulia> reduce(vcat, dfs, cols=:union)\n9\xc3\x973 DataFrame\n\xe2\x94\x82 Row \xe2\x94\x82 name \xe2\x94\x82 id \xe2\x94\x82 num \xe2\x94\x82\n\xe2\x94\x82 \xe2\x94\x82 Char \xe2\x94\x82 Int64 \xe2\x94\x82 Int64? \xe2\x94\x82\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4\n\xe2\x94\x82 1 \xe2\x94\x82 'a' \xe2\x94\x82 1 \xe2\x94\x82 missing \xe2\x94\x82\n\xe2\x94\x82 2 \xe2\x94\x82 'b' \xe2\x94\x82 2 \xe2\x94\x82 missing \xe2\x94\x82\n\xe2\x94\x82 3 \xe2\x94\x82 'c' \xe2\x94\x82 3 \xe2\x94\x82 missing \xe2\x94\x82\n\xe2\x94\x82 4 \xe2\x94\x82 'd' \xe2\x94\x82 4 \xe2\x94\x82 missing \xe2\x94\x82\n\xe2\x94\x82 5 \xe2\x94\x82 'e' \xe2\x94\x82 5 \xe2\x94\x82 missing \xe2\x94\x82\n\xe2\x94\x82 6 \xe2\x94\x82 'f' \xe2\x94\x82 6 \xe2\x94\x82 missing \xe2\x94\x82\n\xe2\x94\x82 7 \xe2\x94\x82 'x' \xe2\x94\x82 7 \xe2\x94\x82 11 \xe2\x94\x82\n\xe2\x94\x82 8 \xe2\x94\x82 'y' \xe2\x94\x82 8 \xe2\x94\x82 22 \xe2\x94\x82\n\xe2\x94\x82 9 \xe2\x94\x82 'z' \xe2\x94\x82 9 \xe2\x94\x82 33 \xe2\x94\x82\nRun Code Online (Sandbox Code Playgroud)\n