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

[Dúvida] O código que a Instrutora ensinou, para quebrar linhas, não funcionou no meu Colab

Estou fazendo o Curso Data Science - Curso de Pandas: conhecendo a biblioteca - Manipulando dados - Aula - Criando uma Coluna Categórica. A nossa instrutora nos ensinou um código para criar uma nova Coluna. E como essa coluna vai conter várias informações em forma de texto, para cada item, para que não fique muito longo, e dificulte a leitura do data frame, ela nos ensinou a fazer "quebras" de linhas no mesmo item, para a visualização ficar melhor. Ela usou o seguinte código:

dados['Descricao'] = dados['Tipo'] + ' em ' + dados['Bairro'] + ' com ' + \
                                        dados['Quartos'].astype(str) + ' quarto(s) ' + \
                                        ' e ' + dados['Vagas'].astype(str) + ' vaga(s) de garagem.'
dados.head()

Nos falou que usando a barra invertida "", conseguiríamos quebrar para outra linha. Na sua aula, no vídeo, a saída do seu código, a apresentação do data frame mostrou as quebras de linhas. Porem quando eu executo no meu Colab, não consigo obter o mesmo resultado, as linhas não são "quebradas". Eu já tentei usar "\n"; "\n" + "", e mesmo assim não obtive o resultado esperado. Eu ampliei a largura da coluna com o código:

pd.set_option('display.max_colwidth', None)

Assim surgiu uma segunda linha, mas não obedeceu os lugares onde o código que a nossa instrutora passou, indica para quebrar a linha. Onde eu preciso corrigir o meu código para ele poder funcionar igual ao da aula? Vocês podem me ajudar e orientar? Muito Obrigado.

6 respostas

Olá, Eduardo, bom dia.

O código abaixo é o que a professora fez, correto?

dados['Descricao'] = dados['Tipo'] + ' em ' + dados['Bairro'] + ' com ' + \
                                        dados['Quartos'].astype(str) + ' quarto(s) ' + \
                                        ' e ' + dados['Vagas'].astype(str) + ' vaga(s) de garagem.'
dados.head()

Se você fizer um exatamente igual, deveria funcionar, mas, o mais importante para que funcione é, após a contra barra, não pode haver espaço, tem que ser a quebra de linha, pois se tiver espaço, ele não entende mais.

Contudo, outro jeito, que acho mais elegante, na minha opinião, é realizar assim:

dados['Descricao'] = (
        dados['Tipo'] + ' em ' + dados['Bairro'] + ' com ' 
        + dados['Quartos'].astype(str) + ' quarto(s) ' 
        + ' e ' + dados['Vagas'].astype(str) + ' vaga(s) de garagem.'
)
dados.head()

Ao usar parênteses para rodear sua operação, você pode simplesmeente dar enter antes de cada + onde queira quebrar a linha e continuar a partir dali . Mas essa é apenas outra forma de fazer o mesmo.

Bom dia Edmilson, Grato pela sua pronta resposta. Eu segui as suas orientações, e refiz o código que a Instrutora passou, tomando o cuidado para não haver nenhum espaço após o contra barra. E também tentei a sua sugestão. Mas a minha saída continua com essa aparência:

Quitinete em Copacabana com 1 quarto(s) e 0 
vaga(s) de garagem.

E essa "quebra" de linha se dá somente pelo tamanho da minha tela, pois a quebra de linha não acontece, nos lugares que "indicamos" no código. Será que é alguma configuração do meu Colab?

Olá Eduardo. Obrigado pelo output do seu problema. Eu achava que o problema era outro. Sim, esse problema provavelmente se dá pela configuração do seu Colab com o tamanho da tela, e aparentemente não é um problema no código, somente de visualização, então pode continuar o curso sem medo que não é um bug.

Mas, caso queira ter certeza absoluta que esse é o problema, tente escrever como uma string com interpolação, desse modo:

dados['Descrição'] = f'{dados["Tipo"]} em {dados["Bairro"]} com {dados["Quartos"].astype(str)} quarto(s) e {dados["Vagas"].astype(str)} vaga(s) de garagem.'.

Se até desse modo o output continuar igual, pode ficar tranquilo que é apenas questão de configuração, provavelmente pelo tamanho da tela mesmo.

Olá, Eduardo! Como vai?

No Google Colab, quando você usa dados.head(), ele renderiza o DataFrame como HTML. Assim, o caractere \n não aparece como quebra de linha, mesmo que esteja presente na string. Você pode substituir os \n pela tag <br> e usar o método to_html() com o parâmetro escape=False. Dessa forma:

dados['Descricao'] = dados['Tipo'] + ' em ' + dados['Bairro'] + '<br>com ' + dados['Quartos'].astype(str) + ' quarto(s)<br>' + 'e ' + dados['Vagas'].astype(str) + ' vaga(s) de garagem.'

from IPython.display import HTML

HTML(dados.head().to_html(escape=False))

Resultado:

Tabela exibindo listagens de imóveis com descrições, incluindo tipo, bairro, quartos, vagas, área e detalhes de preços.

Agora sim o Colab irá renderizar com as quebras de linha visíveis na célula. Além disso, esse código que te mostrei irá funcionar não só no Google Colab, mas também no Jupyter Notebook e VS Code. Como você pode ver nas imagens respectivamente abaixo:

Tabela exibindo listagens de imóveis com descrições, incluindo tipo, bairro, quartos, vagas, área e detalhes de preços.

Tabela exibindo listagens de imóveis com descrições, incluindo tipo, bairro, quartos, vagas, área e detalhes de preços.

Espero ter ajudado e fico à disposição se precisar.

Abraço e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado

Olá Edmilson, Eu rodei em outra máquina, com um novo Colab, e mesmo assim não houve a quebra de linha. Rodei esse novo código que você me sugeriu e apareceram duas colunas de "Descrição". Na saída há uma quebra de linha, mas não seguindo as instruções do código. Veja as saídas, primeira coluna de "Descrição":

Quitinete em 
Copacabana com 
1 quarto(s) e 0 
vaga(s) de 
garagem.

Segunda coluna de "Descrição":

0 Quitinete\n1 Casa\n2 Conjunto 
Comercial/Sala\n3 Apartamento\n4 
Apartamento\n ... \n32955 Quitinete\n32956 
Apartamento\n32957 Apartamento\n32958 
Apartamento\n32959 Conjunto 
Comercial/Sala\nName: Tipo, Length: 32960, dtype: 
object em 0 Copacabana\n1 Jardim Botânico\n2 
Barra da Tijuca\n3 Centro\n4 Higienópolis\n ... 
\n32955 Centro\n32956 Jacarepaguá\n32957 São 
Francisco Xavier\n32958 Leblon\n32959 
Centro\nName: Bairro, Length: 32960, dtype: object 
com 0 1\n1 2\n2 0\n3 1\n4 1\n ..\n32955 
0\n32956 3\n32957 2\n32958 2\n32959 0\nName: 
Quartos, Length: 32960, dtype: object quarto(s) e 0 
0\n1 0\n2 4\n3 0\n4 0\n ..\n32955 0\n32956 
1\n32957 1\n32958 0\n32959 0\nName: Vagas, 
Length: 32960, dtype: object vaga(s) de garagem

E quando eu copiei os textos da saída, eles vieram em uma única linha, note que as "quebras" estão ocupando o espaço de "largura " quase igual. Parece-me que o data frame, não fez a quebra de linha (pois o texto copiado estava em uma única linha), e a aparência que vejo na tela, é de uma determinação do Colab na "largura da coluna. Bem, a Instrutora, sugeriu a quebra de linhas para que os Desenvolvedores recebessem um data frame com uma visualização mais "amigável", mais confortável de ler e analisar. E é fato que com esses códigos isso não está acontecendo. A informação do filtro, está correta (desconsiderando esse seu segundo código), mas se há algum recurso para melhorar a "aparência" do trabalho que vou enviar para outros, (aparência que eu gostaria de receber também, eu não gostaria de ter uma linha longa de texto), eu ainda não sei como fazê-lo. Se você puder me ajudar, eu agradeço.

solução!

Boa tarde Daniel! Grato pela sua gentileza em responder. A sua explicação, foi muito útil, eu apendi coisas novas. E quanto ao seu código, ele funcionou. A saída contem os dados corretamente e a aparência está igual a do vídeo da Instrutora. Muito Obrigado. E queiram me desculpar pela insistência, sou "novato", comecei os estudos esse ano, mas já tenho bastante idade, portanto não posso "esperar" para aprender. Muito Obrigado.