Julia中vcat绑定不同列DataFrame报错原因及最优方法咨询
Julia中实现类似R
bind_rows的DataFrame行绑定 报错原因
Julia DataFrames包的vcat函数默认要求所有输入DataFrame的列完全匹配(列名、顺序都一致),这和R中bind_rows默认自动为缺失列填充NA的行为不同。你遇到的报错就是因为df1缺少c列、df2缺少a列,不符合默认的严格匹配规则。
解决方法(最优实现)
要实现和R bind_rows一致的效果,只需给vcat添加cols=:union参数,它会自动取所有输入DataFrame的列的并集,缺失的列值用missing(Julia的缺失值类型)填充:
using DataFrames df1 = DataFrame(a = 1, b = 1) df2 = DataFrame(b = 1, c = 1) # 执行行绑定,自动补全缺失列 result = vcat(df1, df2, cols=:union)
执行后得到的结果DataFrame为:
| a | b | c |
|---|---|---|
| 1 | 1 | missing |
| missing | 1 | 1 |
其他列匹配规则可选参数
vcat的cols参数还有其他选项,可根据需求选择:
cols=:intersect:只保留所有DataFrame共有的列,丢弃独有列cols=:orderequal:默认值,要求列名和顺序完全一致,不满足则报错cols=:strict:和:orderequal类似,但会额外检查列的数据类型是否一致
内容的提问来源于stack exchange,提问作者Quinten
相关产品推荐
相关产品推荐

