Considere o código abaixo escrito na linguagem Python (versão 3.10.12) com uso das bibliotecas numpy (versão 1.26.4) e pandas (versão 2.2.2). <1> import numpy as np <2> import pandas as pd <3> x = np.array([('gama', 9), ('alfa', 3),('delta', 5),('epsilon', 7),('beta', 1)], dtype=[('a', 'U10'), ('b', 'i4')]) <4> y = pd.DataFrame(x) <5> z = y.sort_values(by="a") <6> print(z.iloc[2,1]) Com a execução do código acima, após o comando da linha <6> será escrito na tela
- A)1
Errada: o valor 1 está associado à linha de `beta`, que fica mais abaixo na ordenação e não na posição pedida pelo `iloc`.
- B)3
Errada: o valor 3 pertence à linha de `alfa`, que vai para a primeira posição após a ordenação, não para a posição 2.
- C)5
Certa: após ordenar por `a`, a terceira linha é `delta`, e o valor da coluna `b` nessa linha é 5.
- D)7
Errada: 7 é o valor da linha `epsilon`, que aparece na quarta posição da tabela ordenada.
- E)um aviso da ocorrência de IndexError
Errada: não ocorre `IndexError`, porque a tabela tem 5 linhas e 2 colunas, então `iloc[2,1]` está dentro do intervalo válido.
Gabarito: C
Aqui a banca mistura dois assuntos bem tranquilos: DataFrame do pandas e ordenação. O array `x` foi criado com campos nomeados, `a` para textos e `b` para números. Quando você faz `pd.DataFrame(x)`, o pandas monta uma tabela com essas duas colunas, preservando os valores originais. Depois, `sort_values(by="a")` ordena as linhas em ordem alfabética pela coluna `a`. A sequência passa a ser: `alfa`, `beta`, `delta`, `epsilon`, `gama`. Ou seja, o pandas não mexe nos números, só reorganiza as linhas conforme o texto da primeira coluna. Na linha `print(z.iloc[2,1])`, o comando pega a linha de índice posicional 2, que é a terceira linha dessa tabela ordenada, e a coluna 1, isto é, a segunda coluna. Nessa posição, o valor armazenado em `b` é 5. Por isso o gabarito é a alternativa C. Não há erro de índice nem confusão de ordem: é só lembrar que `iloc` usa posição, não rótulo, e que a ordenação foi feita pela coluna `a`.