Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

[Dúvida] Dúvida Exibição do Colab

oi pessoal, tudo bem?

Fiquei com uma dúvida que pode ser meio besta, ou algo que não to enxergando no momento... mas como estamos reduzindo dados, nao era para diminuir o número de linhas? Inicialmente tinhamos uma tabela de 32 mil linhas x 9 colunas. Agora depois dessa aula fomos avançando até chegar somente apartamento de linha, que representa 80 e poucos porcento. Minha dúvida é: não era para ter os '80 e poucos porcento' de linhas no caso? No colab ele exibe com reticências e mostra até 32 mil linhas e pouco. Não sei se ficou claro. Embaixo do dataframe ele diz: '19532 rows × 9 columns' mas na exibição está 32 mil. Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Aproveitando o tópico, não sei se será abordado mais para frente, mas como eu faço para quando exibir % deixar os valores com dezena (o dataframe só com os % ou no caso do gráfico também), é possível ? Tipo, apartamento tem 0.845139, da pra deixar 84.5139% ou até 84.51%?

Obrigado desde já.

4 respostas

Oi Ali, essa exibição que vc está mencionando no dataframe é a coluna de index dele, quando vc cria um dataframe sem determinar o index, por padrão cada linha é atribuída um número contando de 0 até o número máximo de linhas. E esse index não muda sem ação da pessoa que está fazendo as alterações, é pra sempre ter uma referência a uma linha específica. Então quando vc faz filtros no dataframe, na hora da visualização, as linhas que não fazem parte do seu filtro são apenas ocultas. Vc pode até ver na imagem que postou, existe o índice 6 e depois o 10. Então não se baseie nessa coluna para saber quantas linhas existem, ela serve para ser a identificação para cada linha.

Quanto a sua dúvida da porcentagem, não entendi se vc quer visualizar esse valor nesse formato ou gravá-lo em algum lugar, mas pode fazer assim. Alguns exemplos:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

a = 0.845139
# pega seu valor original, multiplica por 100 para ficar com as dezenas
b = a * 100
print(b)
# 84.51389999999999
# usa a funcao round para arredondar um valor com o numero de casas decimais que vc quiser
# usa assim: round(valor, numero de casas decimais)
c = round(b, 2)
print(c)
# 84.51
# e adiciona um print com o simbolo de porcentagem
print(f'{c}%')
# 84.51%

se quiser guardar o valor de texto representando a porcentagem Insira aqui a descrição dessa imagem para ajudar na acessibilidade

# faz um cast do numero para string e concatena o simbolo de porcentagem
d = str(c) + '%'
print(d)
# '84.51%'

e se vc quiser direto Insira aqui a descrição dessa imagem para ajudar na acessibilidade

print(f'{round(a * 100, 2)}%')
# 84.51%

Oi Gil, entendi a primeira explicação quanto a visualização do colab, obrigado.

Quanto a %, um exemplo era mostrar essa tabela: Insira aqui a descrição dessa imagem para ajudar na acessibilidade

da seguinte maneira: Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Teria alguma forma de fazer diretamente no colab?

solução!

Oi Ali, tem algumas formas. Aqui tem uma com algumas explicações pra destrinchar essa linha de código (que não precisaria estar com todas as funções juntas). Já aviso, essa forma não é a melhor e não é a mais "pythonica", mas permite usar funções fáceis de entender e como elas se encaixam. Quando vc estiver se sentindo mais aventureiro, procure como fazer usando apply() e funções lambda.

\

df.Tipo.value_counts(normalize=True).mul(100).round(2).astype(str).str.replace('.',',')+'%'

Do começo:

  • df.Tipo retorna uma serie com todos os valores da coluna Tipo do seu dataframe df
  • value_counts(normalize=True) retorna uma serie com a quantidade de cada tipo. Com o normalize=True, traz a proporção de cada tipo entre 0 e 1.
  • mul(x) multiplica a serie por x, no caso usei 100 pois vc quer porcentagem
  • round(x) arredonda os valores da sua serie em x casas decimais, no exemplo, apenas 2 pois foi o numero de casas decimais do seu exemplo
  • astype(tipo) faz uma conversão de tipo de todos os valores dentro da sua serie para o tipo especificado, no caso 'string' para podermos fazer as operações seguintes, então coloquei str
  • str.replace(antiga, nova) substitui em todos os valores da serie a string antiga por nova, nesse caso estou trocando os pontos por vírgulas
  • +'texto' o mais serve como concatenação de strings para a serie inteira e 'texto' será adicionado no final de cada valor da série, no caso do código, um '%'

oi Gil! Muito obrigado pelo esclarecimento. Abs.