Вопрос: Julia DataFrame: удалить столбец по имени


Тип DataFrame в Julia позволяет получить к нему доступ в виде массива, поэтому можно удалить столбцы с помощью индексации:

df = df[:,[1:2,4:end]] # remove column 3

Проблема с этим подходом заключается в том, что я часто знаю только имя столбца, а не индекс столбца в таблице.

Есть ли встроенный способ удаления столбца по имени?

Альтернативно, есть ли лучший способ сделать это, чем это?

colind = findfirst(names(df), colsymbol)
df = df[:,[1:colind-1,colind+1:end]]

Вышеуказанное относится к склонности к провалу; существует несколько краевых случаев (один столбец, первый столбец, последний столбец, символ не в таблице и т. д.),

спасибо


11


источник


Ответы:


Вы можете использовать delete!:

julia> df = DataFrame(A = 1:4, B = ["M", "F", "F", "M"], C = 2:5)
4x3 DataFrame
|-------|---|-----|---|
| Row # | A | B   | C |
| 1     | 1 | "M" | 2 |
| 2     | 2 | "F" | 3 |
| 3     | 3 | "F" | 4 |
| 4     | 4 | "M" | 5 |

julia> delete!(df, :B)
4x2 DataFrame
|-------|---|---|
| Row # | A | C |
| 1     | 1 | 2 |
| 2     | 2 | 3 |
| 3     | 3 | 4 |
| 4     | 4 | 5 |

Для более общих операций помните, что вы можете передать массив символов или массив bool, и поэтому произвольно сложные варианты, такие как

julia> df[~[(x in [:B, :C]) for x in names(df)]]
4x1 DataFrame
|-------|---|
| Row # | A |
| 1     | 1 |
| 2     | 2 |
| 3     | 3 |
| 4     | 4 |

julia> df[setdiff(names(df), [:C])]
4x1 DataFrame
|-------|---|
| Row # | A |
| 1     | 1 |
| 2     | 2 |
| 3     | 3 |
| 4     | 4 |

также будет работать.


17