Julia DataFrame ОШИБКА: BoundsError попытка доступа к попытке доступа к фрейму данных с X строками с индексом false - PullRequest
1 голос
/ 25 июня 2019

Я пытаюсь установить подкадр данных в Джулии следующим образом:

df = DataFrame(a=[1,2,3], b=["x", "y", "z"])
df2 = df[df.a == 2, :]

Я ожидаю получить только второй ряд, но вместо этого получаю ошибку:

ОШИБКА: BoundsError: попытка доступа "попытка доступа к фрейму данных с 3 строками с индексом false"

Что означает эта ошибка и как я могу установить подмножество в DataFrame?

Ответы [ 2 ]

2 голосов
/ 25 июня 2019

Просто чтобы упомянуть другие опции, обратите внимание, что вы можете использовать функцию filter здесь:

julia> filter(row -> row.a == 2, df)
1×2 DataFrame
│ Row │ a     │ b      │
│     │ Int64 │ String │
├─────┼───────┼────────┤
│ 1   │ 2     │ y      │

или

julia> df[filter(==(2), df.a), :]
1×2 DataFrame
│ Row │ a     │ b      │
│     │ Int64 │ String │
├─────┼───────┼────────┤
│ 1   │ 2     │ y      │
0 голосов
/ 25 июня 2019

К счастью, вам нужно добавить только один символ: ..Символ . позволяет транслировать любую функцию Julia, даже такую, как ==.Следовательно, ваш код будет выглядеть следующим образом:

df = DataFrame(a=[1,2,3], b=["x", "y", "z"])
df2 = df[df.a .== 2, :]

Без широковещательной рассылки пункт df.a == 2 возвращает false, поскольку он буквально сравнивает массив [1,2,3] как единое целое,к скалярному значению 2. Массив формы (3,) никогда не будет равен скалярному значению 2 без широковещания, потому что размеры разные.Поэтому это предложение просто возвращает один false.

Полученная ошибка говорит о том, что вы пытаетесь получить доступ к DataFrame с индексом false, который не является допустимым индексом для DataFrame.с 3 рядами.При трансляции с . вы теперь создаете массив Bool массива shape (3,), который является допустимым способом индексации DataFrame с 3 строками.

Подробнее о трансляции см. Официальную Juliaдокументация здесь .

...