Mostrando entradas con la etiqueta Pandas. Mostrar todas las entradas
Mostrando entradas con la etiqueta Pandas. Mostrar todas las entradas

domingo, 1 de marzo de 2026

DATOS. Acceso a datos

CSV. Datos estructurados

Biblioteca Pandas. Acceso a .csv

Aunque el módulo nativo (CSV) es suficiente cuando la tabla de datos es sencilla y el volumen de datos que contiene moderado, para trabajar con bases de datos grandes y complejas es preferible usar la bibliteca Pandas. Por eso no vamos a dedicar al módulo nativo más tiempo del necesario, puesto que será Pandas la opción preferente: lo que sirve para lo mucho, sirve para lo poco. Ganamos tiempo.

Veamos cómo acceder a nuestra base de datos de libros ahora con Pandas.



import pandas as pd
import os

ruta_archivo = 'datos\libros3.csv'

def acceder_con_pandas():
    # 1. Verificar si el archivo existe
    if not os.path.exists(ruta_archivo):
        print(f"❌ El archivo '{ruta_archivo}' no se encuentra.")
        return

    try:
        # 2. Cargar el CSV
        # Pandas detecta automáticamente la cabecera
        df = pd.read_csv(ruta_archivo, encoding='utf-8')

        print("--- 🐼 Acceso Exitoso con Pandas ---")
        
        # 3. Visualización rápida
        print("\n📊 Resumen del contenido (Primeras 5 filas):")
        print(df.head())

        # 4. Información técnica (Nº filas, columnas y tipos de datos)
        print("\nℹ️ Información técnica:")
        df.info()

        # 5. Ejemplos de acceso directo
        if not df.empty:
            # Acceder a una columna específica (ej: 'Título')
            if 'Título' in df.columns:
                print("\n📖 Lista de Títulos:")
                print(df['Título'].to_list())

            # Acceder a un registro específico por su índice (ej: el primero)
            print("\n📍 Primer registro completo:")
            print(df.iloc[0])

    except UnicodeDecodeError:
        print("❌ Error de codificación. Prueba con encoding='latin1' o 'ansi'.")
    except Exception as e:
        print(f"❌ Ocurrió un error inesperado: {e}")

if __name__ == "__main__":
    acceder_con_pandas()

Para ir avanzando puedes analizar este script y aplicarlo a un caso real (un archivo csv como éste) para ver su funcionamiento. Esto es especialmente interesante su lo comparas con el funcionamiento de script basados en el módulo nativo CSV.

NOTA: Acuérdate de guardar tu cvs como librso3.csv dentro de una carpeta que deberás llamar datos o modificar la ruta de acceso de la instrucción ruta_archivo = 'datos\libros3.csv'

martes, 23 de septiembre de 2025

Datos. Python



Biblioteca Camelot (I)

Extracción de tablas en pdf





Cuando trabajamos con documentos pdf, uno de los contenidos de especial interés y que además resulta especialmente complicado de manejar son las tablas de datos (1). Para acceder a su contenido podemos emplear recursos como PyPDF2, pero el resultado no es muy satisfactorio como hemos tenido ocasión de comprobar, así que deberemos probar con otros medios.


Realmente es complicado automatizar la extracción de datos desde un documento pdf de forma realmente útil y son precisamente las tablas las que mayor dificultad presentan (2). Camelot es una librería pensada específicamente para esta tarea y funciona satisfactoriamente, al menos con tablas reales (no con imágenes incrustadas en el pdf) y de conformación sencilla.

Cierto es que trabajar con Camelot presenta cierta dificultad, incluyendo algunas complicaciones para su instalación, pero si empezamos por el principio se pueden superar. Por eso te recomiendo que conozcas esta biblioteca por sus fuentes [web del proyecto], incluyendo la lectura de su [manual on-line] (3).

También supone empezar por el principio planteándote metas sencillas y trabajando con pdf también sencillos. Podrás ir incrementando la complejidad conformes vayas dominando la herramienta. 

Yo te voy a mostrar ahora la que es posiblemente la forma más sencilla de abordar el problema también más simple: mostrar en pantalla el contenido de una tabla de un documento pdf simple (de una página) que contiene una tabla también simple. Inmediatamente podremos pasar a cuestiones de mayor complejidad.

Supongamos que ese documento pdf (tablaSimple.pdf) contiene esta tabla...


... a la que deseamos acceder desde un script de Python (4), concretamente desde este...

import camelot

# Especifica la ruta al archivo PDF
file_path = 'tablaSimple.pdf' 

# Lee las tablas del PDF
tables = camelot.read_pdf(file_path) 

# Imprime el número de tablas encontradas 
print ( f"Total de tablas encontradas: {tables.n} " ) 

# Imprime el contenido de la primera tabla 
print (tables[ 0 ].df)

... que nos devuelve esa misma tabla en el IDE Shell (en mi caso)


Vistas así las cosas, la verdad es que este logro parece bastante pobre, pero podemos hacer varias cosas a partir de aquí; entre otras pasar la tabla a un archivo Excel o de otra extensión (5) o trabajar directamente con el contenido de la tabla mediante librerías como Pandas (6).

En este caso vamos a importar la librería pandas (sin entrar ahora en más detalle)

import pandas as pd

... y añadir unas cuantas instrucciones más al script, por ejemplo acceder a la tabla capturada y pasar a una colección de datos...

tabla = tables[0].df

... como paso previo para manejarla mediante pandas, por ejemplo, accediendo las "celdas" [1-0] y [1-1]...

nombre = tabla.iloc[1,0]
dato = tabla.iloc[1,1]

... y mostrando su contenido

print(f'Nombre {nombre} -> Edad {dato}')
 
... para obtener por pantalla Nombre Juan -> Edad 23.

Esto que acabamos de hacer no parece gran cosa, pero detrás de ello tenemos toda la potencia del manejo de datos que permiten librerías como Pandas y todas aquellas que permiten el tratamiento de datos en Python. El que lo podamos conseguir partiendo de una tabla de datos de un documento pdf es gracias a Camelot. Conocer esta biblioteca es una buena forma de aprovechar el tiempo.

NOTAS

(1) Dado que el contenido de las tablas es frecuentemente numérico, he considerado preferible ubicar esta entrada (estas entradas, mejor) en la sección [Datos]. Aunque manejemos archivos de texto (pdf), si su contenido de interés son las tablas, éstas contienen datos, frecuentemente numéricos, además; así que Camelot  queda entendida aquí como una herramienta orientada a facilitar el acceso a datos. Creo que es un enfoque que se ajusta a la realidad.
(2) Podemos optar por hacerlo mediante ia, aunque tenemos algunas limitaciones que afectan a la confidencialidad (de trabajar con datos profesionales sensibles), de coste y/o de funcionalidad. Personalmente prefiero opciones que trabajen en local y que yo pueda llegar a entender; pero es una cuestión de preferencias.
(3) Al menos parcialmente, volviendo a él cuando necesites resolver algún problema. Otras web también ayudan a entender cómo crear script básicos pero de mucha utilidad [por ejemplo]. Te recomiendo especialmente [este vídeo], cuyo autor, además de conocimiento, muestra una gran capacidad didáctica.
(4) Por mantener la simplicidad del proyecto diremos que el pdf se encuentra en el mismo directorio que el script.
(5) Camelot permite guardar tablas en formato excel (to_excel()), csv (to_csv()), json (to_json()), html (to_html()), markdown (to_markdown()) y sqlite (to_sqlite())
(6) El uso más frecuente de Camelot es crear archivos (ver 5) con las tablas recuperadas, pero también es posible realizar diferentes manipulaciones con los datos mediante librerías como Pandas y todo lo que estas librerías permiten. De Pandas aun no hemos hablado en el blog, pero lo haremos en breve.