3
respostas

Problemas com CEP - obter Lat Long

Estava acompanhando o tópico https://cursos.alura.com.br/forum/topico-como-transformar-cep-para-latitude-e-longitude-126347 mas ao colocar o código no Colab eu recebo o seguinte erro.

ValueError: CEP must be a non-empty string containing only numbers

A coluna CEP é string e só tem números... não sei o que fazer.

3 respostas

Oi Vinicius, como você está?

Você pode compartilhar seu código conosco para que possamos te ajudar melhor?

Fico no aguardo.

Oi Nádia, muito obrigado pelo retorno!

Eu acabei mudando um pouco o código pis eu já consegui o endereço direto sem precisar do CEP, mas mesmo assim ainda dá erro.

import pandas as pd
from geopy.geocoders import Nominatim
from geopy.extra.rate_limiter import RateLimiter

# DataFrame com os dados
df = pd.read_excel("data.xls","Relatório")

geolocator = Nominatim(user_agent="")
geocode = RateLimiter(geolocator.geocode, min_delay_seconds=1)

# Cria a coluna location com o local retornado a partir do endereço
df['location'] = df['Endereço'].apply(geocode)

# Seleciona a latitude e longitude que está dentro do local
df['point'] = df['location'].apply(lambda loc: tuple(loc.point) if loc else None)
print(df['location'])

Vinicius, efetuei alguns testes por aqui. O arquivo de dados está organizado da seguinte forma:

Arquivo com os dados do excel

Vale mencionar alguns pontos relacionado a organização desses dados: a biblioteca que utilizamos, a geopy, utiliza o serviço de localização Nominatim que é uma ferramenta de busca por nome e endereço (geocodificação) e este serviço funciona por trás do OpenStreetMap, um serviço similar ao Google Maps e pode acontecer de a depender de como o seu endereço está organizado, o Nominatim não encontrá-lo. Um exemplo é o seguinte endereço:

Endereço não encontrado

E por que isso ocorre? Isso varia conforme os dados foram cadastrados na plataforma do Nominatim, em alguns casos, eles estão organizados sem informações adicionais no logradouro e para esses casos, seu código retornará None por não encontrar o endereço digitado. Então, caso em algum momento o seu dataframe fique com linhas cujo o valor seja None, vale a pena abrir o Nominatim e confirmar se o endereço consta nos dados da plataforma.

Dito isso, veja como ficou os testes com os dados que apresentei acima:

Resultado da execução com os dados do excel

Outro ponto de atenção é que utilizei um arquivo .xlsx, o arquivo .xls é um formato de excel antigo e pode ocasionar erros de compatibilidade.

Qualquer dúvida estou por aqui, a gente vai se falando.

Abraços!