Se você trabalha com dados geoespaciais, provavelmente já ouviu falar do GeoPandas, uma biblioteca incrível que combina o poder do Pandas com funcionalidades geoespaciais. Neste post, vou explicar como você pode usar o Filtrar Dados com GeoPandas usando parquet, um formato de armazenamento eficiente e amplamente utilizado para grandes volumes de dados.
O que é o GeoPandas?
O GeoPandas é uma extensão do Pandas que permite manipular dados geoespaciais de forma simples e intuitiva. Ele adiciona suporte para geometrias (pontos, linhas, polígonos) e operações espaciais, como interseções, uniões e buffers. Além disso, ele se integra perfeitamente com outras bibliotecas populares, como Shapely, Fiona e PyProj.
Por que usar Parquet?
O Parquet é um formato de armazenamento colunar otimizado para grandes volumes de dados. Ele é altamente eficiente em termos de espaço e desempenho, especialmente quando você precisa filtrar ou consultar apenas um subconjunto dos dados. Combinar GeoPandas com Parquet é uma excelente escolha para trabalhar com dados geoespaciais em escala.
Exemplos Práticos de Filtragem com GeoPandas e Parquet
Vamos explorar alguns exemplos práticos de como filtrar como Filtrar Dados com GeoPandas:
import geopandas as gpd
path = r'H:\\BalaioCientifico\\area_imovel.parquet'
# Exemplo 1: Filtrar apenas imóveis do Acre (AC)
# Estrutura: [(coluna, operador, valor)]
filtro_ac = [('cod_estado', '==', 'AC')]
gdf = gpd.read_parquet(path, filters=filtro_ac)
# Exemplo 2: Filtrar imóveis de múltiplos estados (AC ou PA)
filtro_estados = [[('cod_estado', 'in', ['AC', 'PA'])]]
# OU usando OR lógico entre condições
filtro_estados_or = [[('cod_estado', '==', 'AC')], [('cod_estado', '==', 'PA')]]
gdf = gpd.read_parquet(path, filters=filtro_estados)
# Exemplo 3: Filtrar imóveis com status "PE" (Pendentes)
filtro_pendentes = [('ind_status', '==', 'PE')]
gdf = gpd.read_parquet(path, filters=filtro_ativos)
# Exemplo 4: Filtrar imóveis que NÃO estão Ativos
filtro_nao_ativos = [('ind_status', '!=', 'AT')]
gdf = gpd.read_parquet(path, filters=filtro_nao_cancelados)
# Exemplo 5: Filtrar imóveis com área maior que 1000 hectares
filtro_grandes = [('num_area', '>', 1000)]
gdf = gpd.read_parquet(path, filters=filtro_grandes)
# Exemplo 6: Filtrar imóveis entre 100 e 500 hectares (AND lógico)
filtro_medio_porte = [[('num_area', '>=', 100), ('num_area', '<=', 500)]]
gdf = gpd.read_parquet(path, filters=filtro_medio_porte)
# Exemplo 7: Imóveis ativos (AT) OU em análise no Acre
# [[condição1, condição2]] = condição1 AND condição2
# [[condição1], [condição2]] = condição1 OR condição2
filtro_complexo = [
[('ind_status', '==', 'AT'), ('cod_estado', '==', 'AC')], # Ativos no Acre
[('des_condic', '==', 'Aguardando analise')] # OU aguardando análise (qualquer estado)
]
gdf = gpd.read_parquet(path, filters=filtro_complexo)
# Exemplo 8: Imóveis indígenas (IRU) com área maior que 1000 hectares
filtro_indigenas_grandes = [[('ind_tipo', '==', 'IRU'), ('num_area', '>', 1000)]]
gdf = gpd.read_parquet(path, filters=filtro_indigenas_grandes)
# Exemplo 9: Imóveis do município de Xapuri OU Sena Madureira
filtro_municipios = [
[('municipio', '==', 'Xapuri')],
[('municipio', '==', 'Sena Madureira')]
]
gdf = gpd.read_parquet(path, filters=filtro_municipios)
# Exemplo 10: Imóveis com mais de 4 módulos fiscais que são ativos
filtro_modulos = [[('mod_fiscal', '>', 4), ('ind_status', '==', 'AT')]]
gdf = gpd.read_parquet(path, filters=filtro_modulos)
# Para aplicar filtros em um GeoDataFrame já carregado, use pandas normalmente:
gdf_filtrado = gdf[gdf['cod_estado'] == 'AC']
gdf_filtrado = gdf[(gdf['num_area'] > 100) & (gdf['ind_status'] == 'AT')]
Confira o vídeo que ensino Como Filtrar Dados com GeoPandas e Parquet: