Как я могу добавить новый столбец в Julia Dataframe

#dataframe #julia

Вопрос:

Допустим, у меня есть фрейм данных и вектор, такие как :

 dataframe = DataFrame(Data1 = rand(10), Data2 = rand(10));
Data3 = rand(10)
 

Я хочу добавить Data3 в фрейм данных, например:

     Data1       Data2     Data3
    Float64     Float64   Float64
1   0.757345    0.903133  0.502133
2   0.294749    0.327502  0.323133
3   0.156397    0.427323  0.123133
 

В Python я могу просто df["Data3"] = Data3 добавить столбец, но в Julia dataframe df[!,Data3] = Data3 возвращает :

  • Ошибка метода: нет метода, соответствующего setindex!(::DataFrame, ::Vector{Float64},::typeof(!), ::Vector{Float64})

Также я проверил это решение, но это дало мне :

  • Ошибка аргумента: синтаксис df[column] не поддерживается, вместо этого используйте df[!, column] .

Как я могу добавить вектор в качестве нового столбца в Julia Dataframe?

Ответ №1:

Вы были почти там, вы ищете:

 dataf[!, :Data3] = Data3
 

или

 dataframe[!, "Data3"] = Data3
 

или

 dataframe.Data3 = Data3
 

обратите внимание, что я использую Symbol String здесь или — [!, :Data3] это операция индексирования, поэтому для нее требуется идентификатор индекса row ( ! ) и column ( :Data3 ), в котором вы хотите сохранить данные, а не сами данные.

Вы привязываете фактические данные (10-элементный вектор случайных чисел) к переменной Data3 , поэтому выполнение dataframe[!, Data3] с переменной Data3 (а не Symbol String со значением или "Data3" ) эквивалентно выполнению

 dataframe[!, rand(10)]
 

что означает «я хочу получить доступ ко всем строкам ( ! ) фрейма данных и 10 столбцам, идентифицированным 10 случайными числами». Теперь индексация случайным числом с плавающей запятой не имеет большого смысла (что должно dataframe[!, 0.532] вернуться?) именно поэтому вы получаете сообщение об ошибке, которое вы видите — setindex не принимает a Vector{Float} в качестве аргумента.

Что касается темы обсуждения, на которую вы ссылались, она очень старая, и df["col"] синтаксис давно устарел. Основная концепция индексирования в DataFrames заключается в том, что a DataFrame представляет собой двумерную структуру данных и как таковая должна быть проиндексирована df[row_indices, col_indices] .

DataFrames поддерживает множество способов указания допустимых индексов, которых слишком много, чтобы вдаваться в подробности здесь, но они перечислены в документации здесь .