Подтвердить что ты не робот

Как изменить имена нескольких столбцов в программе Julia (версия 0.3) DataFrame?

Например, скажем, что вы создаете DataFrame от Julia, например, с 20 столбцами:

y=convert(DataFrame, randn(10,20))

Как преобразовать имена столбцов (:x1 ... :x20) в нечто другое, например (:col1, ..., :col20), все сразу?

4b9b3361

Ответ 1

Вы можете найти функцию 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    |

Ответ 2

Один из способов сделать это - с помощью функции 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, поэтому я думал, что буду делиться ею.

Ответ 3

Обновление: Для 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

Ответ 4

v1.1.0

Можно напрямую изменить имена столбцов с помощью

names!(df, colNames_as_Symbols)

Чтобы переименовать столбцы с вектором строк, это можно сделать с помощью

names!(df, Symbol.(colNames_as_strings) ) 

Ответ 5

Используя блок данных 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

Ответ 6

Это короткий и простой ответ для Юлии 1.1.1:

names!(df, [Symbol("Col$i") for i in 1:size(df,2)])