Olá Ronaldo! Tudo tranquilo?
O que acontece é que, quando usamos o inplace = True
a alteração será realizada diretamente no dataframe original, e não teremos nenhum retorno para atribuir a uma nova variável. Por outro lado, se fizermos a alteração sem o inplace = True
teremos como retorno um dataframe que podemos armazenar em uma nova variável.
Para entendermos melhor isso, fiz um dataframe semelhante ao que você está utilizando para utilizarmos como exemplo.
# dataframe exemplo com as idades sem ordenar
data = {
'Nome': ['Carlos', 'Ary', 'Dara'],
'Sexo': ['M', 'M', 'F'],
'Idade': [19, 15, 21],
'Notas': [6.0, 7.5, 7.0],
'Aprovado': [False, True, True]
}
alunos = pd.DataFrame(data)
alunos
Se executarmos uma célula com o seguinte código:
alunos.sort_values(by = ['Idade'])
Teremos como retorno:
| Nome | Sexo | Idade | Notas | Aprovado |
---|
1 | Ary | M | 15 | 7.5 | True |
0 | Carlos | M | 19 | 6 | False |
2 | Dara | F | 21 | 7 | True |
Que é o dataframe ordenado pela coluna “Idade”. No entanto, se na célula seguinte visualizarmos o dataframe alunos
, iremos perceber que ele não estará mais ordenado, isso porque, não fizemos nenhuma alteração diretamente no dataframe e nem salvamos o dataframe ordenado em uma outra variável.
Agora, se executarmos o seguinte código em uma célula:
alunos.sort_values(by = ['Idade'], inplace = True)
Não teremos nada como retorno dessa célula. Isso porque, colocando o inplace = True
, o sort_values
será aplicado diretamente no seu dataframe alunos
, e não retornará nenhum outro dataframe com as alterações. Por isso que, quando você faz df2 = alunos.sort_values(by = ['Idade'], inplace = True).iloc[0:3]
é retornado um erro, porque, nesse trecho de código, você está tentando utilizar o iloc
para selecionar algumas linhas, de um trecho de código que não está te retornando um dataframe.
Dessa forma, para que você consiga fazer essa seleção após ter utilizado o inplace = True
, você pode fazer o seguinte:
# ordenando o dataframe original pelas idades
alunos.sort_values(by = ['Idade'], inplace = True)
# salvando em uma nova variável apenas os 3 primeiros alunos
df2 = alunos.iloc[0:3]
df2
Assim, você está selecionando as linhas do dataframe alunos, após ser ordenado de acordo com as idades :)
Espero que tenha conseguido te ajudar. Qualquer dúvida estou por aqui, tá bom?
Bons estudos!