Например, скажем, что вы создаете DataFrame от Julia, например, с 20 столбцами:
y=convert(DataFrame, randn(10,20))
Как преобразовать имена столбцов (:x1 ... :x20)
в нечто другое, например (:col1, ..., :col20)
, все сразу?
Например, скажем, что вы создаете DataFrame от Julia, например, с 20 столбцами:
y=convert(DataFrame, randn(10,20))
Как преобразовать имена столбцов (:x1 ... :x20)
в нечто другое, например (:col1, ..., :col20)
, все сразу?
Вы можете найти функцию names!
более кратким:
julia> using DataFrames
julia> df = DataFrame(x1 = 1:2, x2 = 2:3, x3 = 3:4)
2x3 DataFrame
|-------|----|----|----|
| Row # | x1 | x2 | x3 |
| 1 | 1 | 2 | 3 |
| 2 | 2 | 3 | 4 |
julia> names!(df, [symbol("col$i") for i in 1:3])
Index([:col2=>2,:col1=>1,:col3=>3],[:col1,:col2,:col3])
julia> df
2x3 DataFrame
|-------|------|------|------|
| Row # | col1 | col2 | col3 |
| 1 | 1 | 2 | 3 |
| 2 | 2 | 3 | 4 |
Один из способов сделать это - с помощью функции rename!
. Метод функции переименования принимает вход DataFrame
, но только позволяет вам изменять одно имя столбца за раз (начиная с версии версии 0.3 с веткой на 1/4/2014). Взглянув в код Index.jl
в хранилище DataFrames, я приведу меня к этому решению, которое работает для меня:
rename!(y.colindex, [(symbol("x$i")=>symbol("col$i")) for i in 1:20])
y.colindex
возвращает индекс для dataframe y
, а следующий аргумент создает словарь, сопоставляющий старые символы столбца с новыми символами столбца. Я предполагаю, что к тому моменту, когда кому-то это понадобится, будет хороший способ сделать это, но я просто потратил несколько часов на то, чтобы понять это в версии версии 0.3 Julia, поэтому я думал, что буду делиться ею.
Обновление: Для Julia 0.4, как описано Джоном Майлсом Уайтом, все имена могут быть изменены с помощью:
names!(df::AbstractDataFrame, vals)
где vals
- это вектор {Символ} той же длины, что и количество столбцов в df
.
Определенные имена могут быть изменены с помощью:
rename!(df::AbstractDataFrame, from::Symbol, to::Symbol)
rename!(df::AbstractDataFrame, d::Associative)
rename!(f::Function, df::AbstractDataFrame)
где d
- ассоциативный тип, который отображает исходное имя в новое имя
и f
- это функция, которая имеет имя старого столбца (символ) в качестве входного и новое имя столбца (символ) в качестве вывода.
Это задокументировано в коде https://github.com/JuliaStats/DataFrames.jl/blob/7e2f48ad9f31185d279fdd81d6413a79b7e42e87/src/abstractdataframe/abstractdataframe.jl
v1.1.0
Можно напрямую изменить имена столбцов с помощью
names!(df, colNames_as_Symbols)
Чтобы переименовать столбцы с вектором строк, это можно сделать с помощью
names!(df, Symbol.(colNames_as_strings) )
Используя блок данных John, мне пришлось использовать colnames!
вместо names!
df = DataFrame(x1 = 1:2, x2 = 2:3, x3 = 3:4)
colnames!(df, ["col$i" for i in 1:3])
Моя версия Julia 0.2.1
Это короткий и простой ответ для Юлии 1.1.1:
names!(df, [Symbol("Col$i") for i in 1:size(df,2)])