将 DataFrame 集合合并为一个大 DataFrame

ard*_*aar 2 dataframe julia

假设我有 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)

Bog*_*ski 6

做就是了:

\n\n
julia> 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\n
Run Code Online (Sandbox Code Playgroud)\n\n

或者

\n\n
julia> 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\n
Run Code Online (Sandbox Code Playgroud)\n