Questão nº 26
Questão de Economia de Energia · FGV EPE 2024 (nº 26)
Considere o código a seguir, escrito na linguagem de programação Python (versão 3.11.3).
<1> import pandas as pd
<2> x = {"0": pd.Series([1.0, 2.0], index=["a", "b"]),
<3> "1": pd.Series([3.0, 4.0, 5.0], index=["a", "b", "c"])}
<4> x = pd.DataFrame(x)
<5> y = x["1"][:2].iloc[-1]
Assinale a opção que indica o valor que y recebe na linha <5>.
- A1.0
- B2.0
- C3.0
- D4.0 (alternativa correta)
- ENaN
Resposta comentada
Gabarito Alternativa D
Em Pandas, um DataFrame é uma tabela de dados, e uma Series é uma coluna dessa tabela. Para acessar dados, usamos indexação baseada em rótulos (como df['coluna'] ou df.loc[]) e indexação baseada em posição inteira (df.iloc[]). Ao criar um DataFrame a partir de Series com índices diferentes, o Pandas alinha os dados pelos rótulos, preenchendo com NaN (Not a Number) onde não há correspondência.
Vamos analisar o código passo a passo:
-
Linhas <2> e <3>: Cria um dicionário
xonde as chaves são os nomes das futuras colunas e os valores são Series."0": pd.Series([1.0, 2.0], index=["a", "b"])"1": pd.Series([3.0, 4.0, 5.0], index=["a", "b", "c"])
-
Linha <4>: Converte o dicionário
xem umpd.DataFrame. O Pandas alinha as Series pelos seus índices. O índice 'c' existe apenas na Series "1", então a coluna "0" terá umNaNpara o rótulo 'c'.
O DataFramexresultante será:0 1 a 1.0 3.0 b 2.0 4.0 c NaN 5.0 -
Linha <5>:
y = x["1"][:2].iloc[-1]x["1"]: Seleciona a coluna com o rótulo "1" do DataFramex. Isso retorna uma Series:a 3.0 b 4.0 c 5.0 Name: 1, dtype: float64x["1"][:2]: Realiza um fatiamento posicional (slice) nos dois primeiros elementos da Series resultante.[:2]significa "do início até a posição 2 (exclusiva)".
A Series resultante é:a 3.0 b 4.0 Name: 1, dtype: float64.iloc[-1]: Aplica indexação posicional (integer-location based indexing) no objeto resultante do fatiamento.[-1]significa "o último elemento".
Na Seriesa 3.0, b 4.0, o último elemento é4.0.
Portanto, y recebe o valor 4.0.
(A) Incorreta: 1.0 é o primeiro valor da coluna "0", não da coluna "1" que está sendo acessada.
(B) Incorreta: 2.0 é o segundo valor da coluna "0", não da coluna "1".
(C) Incorreta: 3.0 é o primeiro valor da Series fatiada x["1"][:2]. O comando .iloc[-1] busca o último valor, não o primeiro. Armadilha da banca: O aluno pode confundir iloc[-1] com o primeiro elemento ou com um índice que não existe, ou simplesmente esquecer que [-1] significa o último elemento em Python.
(D) Correta: Conforme a análise passo a passo, x["1"] seleciona a coluna [3.0, 4.0, 5.0]. [:2] fatia para [3.0, 4.0]. Finalmente, .iloc[-1] seleciona o último elemento dessa fatia, que é 4.0.
(E) Incorreta: NaN (Not a Number) apareceria se houvesse uma tentativa de acesso a um elemento inexistente após o alinhamento do DataFrame (por exemplo, x.loc['c', '0']), mas não é o caso aqui.
Fonte: FGV EPE 2024 Analista de Pesquisa Energética - Economia de Energia (Caderno Tipo 1). Reproduzida para fins de estudo.