1
resposta

Problema de str.

Olá boa tarde, durante o curso: Python pandas: técnicas avançadas, aula 2 atividade 8. Estou tendo um problema, quando executo o seguinte código:

columns = dados_normal_listings.filter(like='imovel_caracteristicas').columns


for column in columns: 
    dados_normal_listings[column] = dados_normal_listings[column].str[1:-1].str.replace("'","").str.split(",")
    dados_highlights_listings[column] = dados_highlights_listings[column].str[1:-1].str.replace("'","").str.split(",")

Na hora de executar aparece o seguinte erro:

Can only use .str accessor woith string values.

Pesquisei sobre e é relacionado a strings em dataframes, mas não consigo achar a solução. Pois estou fazendo igual ao professor da aula, já limpei e rodei as células e nada.

Se alguém puder me ajudar desde já agradeço.

1 resposta

Olá Mateus, tudo bem?

Esse erro ocorre quando você tenta usar o .str em colunas que contêm valores que não são strings.

O que pode ter ocorrido é que você tenha executado esse código mais de uma vez. Eu executei esse código mais de uma vez e obtive o mesmo erro. Isso acontece porque, após a primeira execução, o conteúdo das colunas é transformado de strings para listas. Quando você tenta aplicar os métodos .str novamente em valores que agora são listas, isso causa o erro, pois o acessor .str só pode ser usado em colunas com valores do tipo string.

Antes de tudo, recomendo que você reinicie a sessão do Colab, pois isso irá restaurar o estado inicial do DataFrame, onde as colunas ainda contêm strings. Para isso deixo os passos:

  1. No menu de ferramentas do Google Colaboratory, clicar em "Ambientes de execução";

  2. Selecionar a opção "Reiniciar sessão e executar tudo".

Para realizar essas etapas, você pode acompanhar a imagem abaixo:

Reiniciar sessão e executar tudo, no Google Colaboratory

Caso ainda assim o erro persista, você pode converter as colunas para string antes de aplicar os métodos da acessor .str. Assim:

columns = dados_normal_listings.filter(like='imovel_caracteristicas').columns

for column in columns:
    # Converte a coluna para string antes de usar .str
    dados_normal_listings[column] = dados_normal_listings[column].astype(str).str[1:-1].str.replace("'", "").str.split(", ")
    dados_highlights_listings[column] = dados_highlights_listings[column].astype(str).str[1:-1].str.replace("'", "").str.split(", ")

Dessa forma, mesmo que a coluna contenha valores que não são strings, eles serão convertidos para strings antes de aplicar os métodos da acessor .str, evitando o erro.

Espero ter ajudado.

Qualquer dúvida, compartilhe no fórum.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!