在 Julia 中加入 DataFrame

Posted

技术标签:

【中文标题】在 Julia 中加入 DataFrame【英文标题】:Joining DataFrames in Julia 【发布时间】:2019-05-13 18:43:11 【问题描述】:

我正在使用 v7.0 的 DataFrames.jl 并且想知道这是否是一种连接两个 DataFrames 的方法,这样两个 DataFrames 共有的所有列都连接在一起,而列之间不共有DataFrames 都被标记为缺失。

join() 函数似乎为DataFrame 创建了一个新密钥。 如果没有完全相同的列名,vcat 函数似乎无法连接 DataFrames。

我在下面的意思的一个例子。

我想合并

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]) 

我想用大的DataFrames 来做这个,所以手动添加密钥是不可行的。

【问题讨论】:

听起来您想要完全加入。请问为什么join() 不适合你?另外,您使用的是哪个版本的 Julia? 【参考方案1】:

我在 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 的列名,它应该免除您手动命名键的麻烦。

【讨论】:

在 Julia 1.0.1 和 DataFrame 0.14.1 中收到完全相同的输出 : 的语法是什么? ArgumentError: join function for data frames is not supported. Use innerjoin, leftjoin, rightjoin, outerjoin, semijoin, antijoin, or crossjoin @PatrickT 这篇文章已有 2.5 年历史。从那时起,Julia 发生了很大的变化(最新版本是 v1.6.1)。函数调用可能已经改变,但基本操作仍然是外连接。 你会考虑更新你的答案吗?

以上是关于在 Julia 中加入 DataFrame的主要内容,如果未能解决你的问题,请参考以下文章

在项目中加入其他样式

在 SQLAlchemy 中加入后加入

在 Spark 中加入数据框

怎么在JTable表格中加入如JComboBox之类的控件?有注释加分。

在 Spark 中加入数据集

在 oracle 中加入大量表