Юлия датафрейм прямой доступ к строке - PullRequest
2 голосов
/ 18 февраля 2020

В Julia DataFrames можно напрямую получить доступ к столбцу :col кадра данных df, написав df[!, :col]. Это аналогичный быстрый способ прямого доступа к строке? Я знаю, что могу сделать df[2, :], чтобы получить копию строки 2, но мне не нужна копия, поскольку я хочу изменить содержимое строки.

Cheers Sigurd

1 Ответ

5 голосов
/ 18 февраля 2020

Выбор одной строки из фрейма данных возвращает DataFrameRow, который является представлением строки в исходном фрейме данных. Поэтому любые изменения, внесенные вами в DataFrameRow, будут отражены в исходном фрейме данных:

julia> using DataFrames

julia> df = DataFrame(a=1:3, b=4:6)
3×2 DataFrame
│ Row │ a     │ b     │
│     │ Int64 │ Int64 │
├─────┼───────┼───────┤
│ 1   │ 1     │ 4     │
│ 2   │ 2     │ 5     │
│ 3   │ 3     │ 6     │

julia> dfr = df[2, :]
DataFrameRow
│ Row │ a     │ b     │
│     │ Int64 │ Int64 │
├─────┼───────┼───────┤
│ 2   │ 2     │ 5     │

julia> dfr.b = 100
100

julia> df
3×2 DataFrame
│ Row │ a     │ b     │
│     │ Int64 │ Int64 │
├─────┼───────┼───────┤
│ 1   │ 1     │ 4     │
│ 2   │ 2     │ 100   │
│ 3   │ 3     │ 6     │

Конечно, если вы просто хотите изменить значения нескольких записей в строке, вы можете сделать непосредственно без необходимости создавать DataFrameRow:

julia> df = DataFrame(a=1:3, b=4:6)
3×2 DataFrame
│ Row │ a     │ b     │
│     │ Int64 │ Int64 │
├─────┼───────┼───────┤
│ 1   │ 1     │ 4     │
│ 2   │ 2     │ 5     │
│ 3   │ 3     │ 6     │

julia> df[2, :] = [101, 102]
2-element Array{Int64,1}:
 101
 102

julia> df
3×2 DataFrame
│ Row │ a     │ b     │
│     │ Int64 │ Int64 │
├─────┼───────┼───────┤
│ 1   │ 1     │ 4     │
│ 2   │ 101   │ 102   │
│ 3   │ 3     │ 6     │
...