在Julia中连接数据框

4

我正在使用 DataFrames.jl 的 v7.0 版本,想知道是否有一种方法可以连接两个 DataFrame,以便将这两个 DataFrame 共同拥有的所有列连接在一起,而不是共同拥有的列则标记为缺失。

join() 函数似乎会为 DataFrame 创建一个新键。 vcat 函数似乎无法将列名称不完全相同的 DataFrame 进行连接。

以下是我所指的示例。

我希望将下列数据组合:

df1 = DataFrame(
    A = [1, 1000, 10000, 100000],
    B = [1,2,3,4],
    D = ["N", "M", "I", "J"])
df2 = DataFrame(
    A = [1,2],
    B = repeat(1:2, inner=1),
    C = ["hi","CE"])

以一种方式,让我得到...
df3 = DataFrame(
    A = [1,1000,10000,100000, 2],
    B = [1,2,3,4,2],
    C = ["hi", missing, missing, missing, "CE"],
    D = ["N", "M", "I", "J", missing]) 

我希望能够处理大型的DataFrame,因此手动添加键是不可行的。


听起来你需要一个全连接。我可以问一下为什么 join() 对你没用吗?另外,你使用的是哪个版本的Julia? - Kevin L. Keys
1个回答

4
我使用 Julia v0.6.2 和 DataFrames.jl v0.11.7 实现了这个功能:
join(df1, df2, kind = :outer, on = intersect(names(df1), names(df2)))

我的输出:

5×4 DataFrames.DataFrame
│ Row │ A      │ B │ D       │ C       │
├─────┼────────┼───┼─────────┼─────────┤
│ 1   │ 1      │ 1 │ N       │ hi      │
│ 2   │ 1000   │ 2 │ M       │ missing │
│ 3   │ 10000  │ 3 │ I       │ missing │
│ 4   │ 100000 │ 4 │ J       │ missing │
│ 5   │ 2      │ 2 │ missing │ CE      │

由于它同时引用了df1df2的列名,因此不需要手动命名键。


2
在Julia 1.0.1和DataFrame 0.14.1中都获得了完全相同的输出。 - user172056
:的语法是什么? - liang
ArgumentError: join function for data frames is not supported. Use innerjoin, leftjoin, rightjoin, outerjoin, semijoin, antijoin, or crossjoin - PatrickT
@PatrickT 这篇帖子已经有2.5年的历史了。自那时以来,Julia发生了很大的变化(最新版本是v1.6.1)。函数调用可能已经改变,但基本操作仍然是外连接。 - Kevin L. Keys
1
你是否考虑更新你的回答? - PatrickT

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接