Как выполнить вертикальную конкатенацию с несоответствующими именами столбцов? - PullRequest
1 голос
/ 11 июля 2020

У меня есть два df, как показано ниже,

df1

│ Row │ x1    │ x2    │ x3    │
│     │ Int64 │ Int64 │ Int64 │
├─────┼───────┼───────┼───────┤
│ 1   │ 8     │ 1     │ 4     │
│ 2   │ 4     │ 3     │ 1     │
│ 3   │ 7     │ 8     │ 1     │

df2

│ Row │ x1    │ x2    │ x3    │ x4    │
│     │ Int64 │ Int64 │ Int64 │ Int64 │
├─────┼───────┼───────┼───────┼───────┤
│ 1   │ 20    │ 14    │ 18    │ 100   │
│ 2   │ 13    │ 19    │ 17    │ 101   │
│ 3   │ 13    │ 10    │ 16    │ 102   │

Когда я выполняю vcat, он выдает ArgumentError: column (s) x4 отсутствуют в аргументе (ах) 1 Я понял эту ошибку из-за несоответствия имен столбцов. Есть ли способ добавить эти фреймы данных и поместить missing там, где его нет.

Ожидаемый результат:

6×3 DataFrame
│ Row │ x1    │ x2    │ x3    │ x4    |
│     │ Int64 │ Int64 │ Int64 │       |
├─────┼───────┼───────┼───────┤───────┤
│ 1   │ 8     │ 1     │ 4     │missing|
│ 2   │ 4     │ 3     │ 1     │missing|
│ 3   │ 7     │ 8     │ 1     │missing|
│ 4   │ 20    │ 14    │ 18    │100    |
│ 5   │ 13    │ 19    │ 17    │101    |
│ 6   │ 13    │ 10    │ 16    │102    |

1 Ответ

3 голосов
/ 11 июля 2020

Просто введите:

vcat(df1, df2, cols=:union)

Вы можете найти эту информацию, просмотрев справку для vcat:

julia> ?vcat
  
  ...

  Example
  ≡≡≡≡≡≡≡≡≡

  julia> df1 = DataFrame(A=1:3, B=1:3);

  ...

  julia> df3 = DataFrame(A=7:9, C=7:9);

  ...

  julia> vcat(df1, df3, cols=:union)
  6×3 DataFrame
  │ Row │ A     │ B       │ C       │
  │     │ Int64 │ Int64?  │ Int64?  │
  ├─────┼───────┼─────────┼─────────┤
  │ 1   │ 1     │ 1       │ missing │
  │ 2   │ 2     │ 2       │ missing │
  │ 3   │ 3     │ 3       │ missing │
  │ 4   │ 7     │ missing │ 7       │
  │ 5   │ 8     │ missing │ 8       │
  │ 6   │ 9     │ missing │ 9       │
...