Vamos voltar para o exemplo dos dados grades_2020() definidos antes:
grades_2020()
| name | grade_2020 | 
|---|---|
| Sally | 1.0 | 
| Bob | 5.0 | 
| Alice | 8.5 | 
| Hank | 4.0 | 
Para recuperar um vetor para name, podemos acessar o DataFrame com o ., como fizemos anteriormente com structs em Section 3:
function names_grades1()
    df = grades_2020()
    df.name
end
names_grades1()
["Sally", "Bob", "Alice", "Hank"]
ou podemos indexar um DataFrame de modo muito parecido com uma Array utilizando símbolos e caracteres especiais. O segundo índice é a indexação da coluna:
function names_grades2()
    df = grades_2020()
    df[!, :name]
end
names_grades2()
["Sally", "Bob", "Alice", "Hank"]
Perceba que df.name é exatamente o mesmo que o comando df[!, :name], o que você pode verificar fazendo:
julia> df = DataFrame(id=[1]);
julia> @edit df.name
Em ambos os casos, ele dará a coluna :name. Também existe o comando df[:, :name] que copia a coluna :name. Na maioria dos casos, df[!, :name] é a melhor aposta, pois é mais versátil e faz uma modificação no local.
Para qualquer linha, digamos a segunda linha, podemos usar o primeiro índice como indexação de linha:
df = grades_2020()
df[2, :]
| name | grade_2020 | 
|---|---|
| Bob | 5.0 | 
ou criar uma função para nos dar qualquer linha i que quisermos:
function grade_2020(i::Int)
    df = grades_2020()
    df[i, :]
end
grade_2020(2)
| name | grade_2020 | 
|---|---|
| Bob | 5.0 | 
Podemos também obter apenas a coluna names para as 2 primeiras linhas usando fatiamento (novamente, de modo similar a um Array):
grades_indexing(df) = df[1:2, :name]
grades_indexing(grades_2020())
["Sally", "Bob"]
Se assumirmos que todos os nomes na tabela são únicos, também podemos escrever uma função para obter a nota de uma pessoa por meio de seu name. Para fazer isso, convertemos a tabela de volta para uma das estruturas de dados básicas de Julia (veja Section 3.2) que é capaz de criar mapeamentos, a saber Dicts:
function grade_2020(name::String)
    df = grades_2020()
    dic = Dict(zip(df.name, df.grade_2020))
    dic[name]
end
grade_2020("Bob")
5.0
que funciona porque zip itera pelo df.name e df.grade_2020 ao mesmo tempo como um “zipper”:
df = grades_2020()
collect(zip(df.name, df.grade_2020))
("Sally", 1.0)
("Bob", 5.0)
("Alice", 8.5)
("Hank", 4.0)
Entretanto, converter um DataFrame para Dict só é útil quando os elementos são únicos. Geralmente esse não é o caso e é por isso que precisamos aprender como filter (filtrar) um DataFrame.