#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
поддерживает множество способов указания допустимых индексов, которых слишком много, чтобы вдаваться в подробности здесь, но они перечислены в документации здесь .