- InfinitePy Newsletter 🇪🇸
- Posts
- Trabajando con Datos en Python: Desde Técnicas Básicas hasta Avanzadas
Trabajando con Datos en Python: Desde Técnicas Básicas hasta Avanzadas
Python se ha convertido en uno de los lenguajes de programación más populares para la manipulación y el análisis de datos, gracias a su simplicidad y al poder de sus bibliotecas.
🕒 Tiempo estimado de lectura: 10 minutos
La lectura y escritura de archivos son operaciones fundamentales en Python y a menudo son necesarias para tareas como el procesamiento de datos, la gestión de configuraciones y la generación de registros. Entender cómo trabajar con datos es una habilidad crucial, ya sea leyendo y escribiendo archivos de texto básicos, cargando conjuntos de datos o realizando manipulaciones de datos complejas, Python te tiene cubierto.
En este post, comenzaremos con lo básico del manejo de archivos usando open() y luego profundizaremos en bibliotecas poderosas como Pandas para tareas de manipulación de datos más avanzadas. Cubriremos ejemplos prácticos para usuarios principiantes, intermedios y avanzados.
Ahora, vamos a sumergirnos en el mundo de los Datos en Python con algunos ejemplos prácticos que también están disponibles en Google Colab aquí 👨🔬.
Leer archivos es una de las habilidades fundamentales que necesitas adquirir. La función incorporada open() de Python hace que esta tarea sea sencilla. Aquí te mostramos cómo hacerlo:
Primero, descargaremos un archivo de muestra para nuestro uso.
# Importar la función urlretrieve del módulo urllib.request # Esta función ayuda a descargar un archivo desde una URL dada from urllib.request import urlretrieve # Definir la URL del archivo a ser descargado url = 'https://infinitepy.s3.amazonaws.com/samples/lorem_ipsum.txt' # Definir el nombre del archivo local donde se guardará el archivo descargado nombre_archivo = 'lorem_ipsum.txt' # Utilizar la función urlretrieve para descargar el archivo de la URL dada # y guardarlo localmente con el nombre de archivo especificado urlretrieve(url, nombre_archivo)
Ahora podemos abrir el archivo.
# Abrir el archivo descargado para lectura ('r' representa el modo de lectura) # La instrucción 'with' asegura que el archivo se cierre correctamente después de que su bloque de código termine with open(nombre_archivo, 'r') as archivo: # Leer todo el contenido del archivo contenido = archivo.read() # Imprimir el contenido del archivo en la consola print(contenido)
Escribir datos en un archivo es igualmente sencillo:
# Escritura básica de archivos # La instrucción 'with' se usa para asegurar la adquisición y liberación adecuada de recursos. # Es un administrador de contexto que simplifica el trabajo con archivos manejando el cierre de archivos automáticamente. with open('salida.txt', 'w') as archivo: # La función 'open' se usa para abrir un archivo. # El primer argumento es el nombre del archivo. Si el archivo no existe, se creará. # El segundo argumento 'w' representa el 'modo de escritura', que nos permite escribir en el archivo. # El método 'archivo.write' se usa para escribir la cadena proporcionada en el archivo. # Aquí, escribe la cadena 'Olá, mundo!' en 'salida.txt'. archivo.write('Olá, mundo!') # En este punto, el gestor de contexto del 'with' cerrará automáticamente el archivo, # incluso si ocurre un error, asegurando que los recursos se liberen correctamente.
Ejemplo práctico
A continuación se muestra un ejemplo práctico que demuestra cómo leer y escribir en un archivo de texto. Vamos a crear un rastreador de tareas simple. Tendremos dos funciones:
una para leer tareas de un archivo y
otra para escribir nuevas tareas en un archivo.
Escribiendo Tareas en un Archivo
Primero, vamos a crear una función para escribir tareas en un archivo. Cada tarea se escribirá en una nueva línea.
def escribir_tareas_en_archivo(nombre_archivo, tarefas): """ Escribir una lista de tareas en un archivo especificado. Args: nombre_archivo (str): El nombre del archivo donde se escribirán las tareas. tareas (list): Una lista de tareas a escribir en el archivo. """ # Abrir un archivo con el nombre dado en modo de escritura ('w'). # La instrucción 'with' asegura la adquisición y liberación adecuada de recursos. # El archivo se cerrará automáticamente después del bloque de código indentado. with open(nombre_archivo, 'w') as archivo: # Iterar sobre cada tarea en la lista de tareas proporcionada. for tarefa in tareas: # Escribir cada tarea en el archivo seguida de un carácter de nueva línea. archivo.write(tarefa + '\n') # Imprimir un mensaje en la consola indicando que las tareas se han escrito exitosamente en el archivo. print(f"Las tareas han sido escritas en {nombre_archivo}")
Leyendo Tareas de un Archivo
A continuación, vamos a leer tareas del archivo. Leeremos cada línea y la devolveremos como una lista de tareas.
def leer_tareas_de_archivo(nombre_archivo): """ Leer tareas de un archivo especificado. Args: nombre_archivo (str): El nombre del archivo de donde se leerán las tareas. Returns: list: Una lista de tareas leídas del archivo. """ tarefas = [] # Inicializar una lista vacía para contener las tareas try: # Intentar abrir el archivo en modo de sólo lectura ('r') with open(nombre_archivo, 'r') as archivo: # Leer todas las líneas del archivo en la lista 'tarefas' tarefas = archivo.readlines() # Eliminar el carácter de nueva línea '\n' del final de cada tarea tarefas = [tarefa.strip() for tarefa in tarefas] except FileNotFoundError: # Si no se encuentra el archivo, imprimir un mensaje de error print(f"El archivo {nombre_archivo} no existe.") # Devolver la lista de tareas (o una lista vacía si no se encontró el archivo) return tarefas
Usando las Funciones
Aquí tienes un ejemplo de cómo puedes usar estas funciones:
nombre_archivo = 'tarefas.txt' # Definir una lista de tareas para escribir en el archivo tareas_para_escribir = ['Comprar alimentos', 'Completar el tutorial de Python', 'Pasear al perro'] # Llamar a la función para escribir tareas en el archivo escribir_tareas_en_archivo(nombre_archivo, tareas_para_escribir) # Llamar a la función para leer tareas del archivo tareas_leidas = leer_tareas_de_archivo(nombre_archivo) print("Tareas leídas del archivo:") # Imprimir cada tarea leída del archivo for tarefa in tareas_leidas: print("- " + tarefa)
Trabajando con Archivos CSV en Python con Pandas
Los archivos CSV (Valores Separados por Comas) son unos de los formatos de almacenamiento de datos más comunes en ciencia de datos, análisis y aprendizaje automático. Pandas, una biblioteca poderosa para la manipulación y análisis de datos en Python, tiene soporte incorporado para manejar archivos CSV sin esfuerzo.
Pandas es una biblioteca de código abierto que proporciona estructuras de datos de alto rendimiento y herramientas de análisis de datos fáciles de usar para Python. Es particularmente adecuada para trabajar con datos estructurados, como archivos CSV.
Leyendo Archivos CSV
Para leer un archivo CSV en un DataFrame, se utiliza la función read_csv:
# Importar la biblioteca pandas que se usa muy comúnmente para la manipulación y análisis de datos en Python import pandas as pd # Leer un archivo CSV desde la URL proporcionada en un DataFrame # Un DataFrame es una estructura de datos etiquetada de 2 dimensiones con columnas de tipos potencialmente diferentes, # similar a una tabla en una base de datos o una hoja de cálculo de Excel. df = pd.read_csv('https://infinitepy.s3.amazonaws.com/samples/employees.csv') # Mostrar las primeras filas del DataFrame para verificar que los datos se cargaron correctamente print(df.head()) # Línea opcional para inspección rápida de datos
Mostrando Datos
Puedes mostrar las primeras filas del DataFrame usando el método head:
# El método 'head' de un DataFrame de pandas devuelve las primeras n filas. # Por defecto, devuelve las primeras 5 filas si no se le da ningún argumento. # Entonces, la siguiente línea de código imprime las primeras 5 filas del DataFrame 'df'. print(df.head())
Manipulación Simple de Datos
Digamos que quieres seleccionar una columna específica del DataFrame:
# Imprimir la columna 'Name' del DataFrame 'df' # La columna 'Name' se accede usando df['Name'] print(df['Name'])
Filtrando y Ordenando Datos
Filtrar datos se puede hacer usando condiciones:
# La siguiente línea filtra el DataFrame 'df' para incluir solo filas donde la columna 'Salary' sea mayor que 5000. # El resultado se asigna a 'filtered_df', que es un nuevo DataFrame que contiene las filas filtradas. filtered_df = df[df['Salary'] > 5000] # La siguiente línea imprime las primeras 5 filas de 'filtered_df' en la consola. # Esto es útil para inspeccionar rápidamente los datos filtrados y asegurarse de que cumplan con nuestras expectativas. print(filtered_df.head())
Para ordenar datos, usa el método sort_values:
# Ordenar el DataFrame 'df' por los valores en la columna 'Salary' en orden descendente (de mayor a menor) sorted_df = df.sort_values(by='Salary', ascending=False) # Imprimir las primeras 5 filas del DataFrame ordenado # Usamos el método head() para mostrar las 5 primeras entradas de sorted_df print(sorted_df.head())
Trabajo y Práctica con Proyectos: Analizando Datos de Ventas
Ahora, apliquemos lo que hemos aprendido en un escenario del mundo real. Supongamos que tienes un archivo CSV con datos de ventas para diferentes regiones, productos y meses. Analizarás estos datos para obtener información.
Leer Datos:
# Leer datos de un archivo CSV disponible en la URL dada y almacenarlos en un DataFrame llamado sales_df # La función read_csv obtiene los datos y los estructura en un formato adecuado para el análisis sales_df = pd.read_csv('https://infinitepy.s3.amazonaws.com/samples/sales_data.csv')
Inspeccionar Datos:
# 'head()' es un método incorporado en el DataFrame de pandas que devuelve las primeras n filas. # Por defecto, devuelve las primeras 5 filas. Puedes especificar un número diferente como argumento como 'head(10)' para las primeras 10 filas. sales_df.head() # El método .info() se llama en 'sales_df', utilizado para obtener un resumen conciso del DataFrame # La salida incluirá: # - El tipo de clase del DataFrame # - El número de entradas no nulas en cada columna # - Los nombres de las columnas y sus tipos de datos (dtype) # - Uso de memoria del DataFrame # Este método es muy útil para obtener una visión rápida de tus datos, # lo que puede ayudar a entender su estructura y a identificar cualquier problema potencial de los datos. sales_df.info()
Limpiar Datos: Eliminar duplicados y llenar valores faltantes:
# Eliminar filas duplicadas del DataFrame 'sales_df' en su lugar. # Esto significa que cualquier fila duplicada se eliminará directamente del objeto 'sales_df', # y no se creará ninguna copia del DataFrame. sales_df.drop_duplicates(inplace=True) # Llenar cualquier valor faltante (NaN) en el DataFrame 'sales_df' con 0. # El parámetro 'inplace=True' significa que el DataFrame se modificará directamente, # sin crear una copia. sales_df.fillna(0, inplace=True)
Analizar Datos: Calcular las ventas totales por región:
# Usar groupby() para agrupar los datos por la columna 'Region' # Luego, encadenar .sum() para calcular las ventas totales por cada región ventas_totales_region = sales_df.groupby('Region')['Sales'].sum() # Imprimir el resultado que muestra las ventas totales por región print(ventas_totales_region)
Analizar Datos: Encontrar los 5 productos principales por ventas:
# Agrupar los datos de ventas por 'Product' y sumar las 'Sales' para cada producto. ventas_productos_principales = sales_df.groupby('Product')['Sales'].sum() # Ordenar las ventas sumadas en orden descendente para obtener los productos más vendidos en la parte superior. ventas_productos_principales_ordenadas = ventas_productos_principales.sort_values(ascending=False) # Seleccionar los 5 productos principales con las ventas más altas. top_5_productos_ventas = ventas_productos_principales_ordenadas.head(5) # Imprimir el resultado para ver los nombres y ventas de los 5 productos principales. print(top_5_productos_ventas)
Guardar Resultados: Guardar los datos limpiados y los resultados del análisis:
# Exportar el DataFrame de ventas limpiado a un archivo CSV # 'index=False' especifica no escribir el índice de fila en el archivo. sales_df.to_csv('ventas_limpiadas.csv', index=False) # Exportar el DataFrame de ventas totales por región a un archivo CSV ventas_totales_region.to_csv('ventas_totales_region.csv') # Exportar el DataFrame de los 5 productos principales por ventas a un archivo CSV top_5_productos_ventas.to_csv('productos_principales.csv')
Conclusión
Ya sea que estés buscando convertirte en un científico de datos o simplemente deseas utilizar los datos de manera más efectiva en tu rol actual, dominar las capacidades de datos de Python indudablemente será un cambio de juego.
Desde la lectura y escritura de archivos básicos con la función open() de Python hasta aprovechar la poderosa biblioteca Pandas para manipulaciones complejas de datos, hemos cubierto una gama de técnicas para trabajar con datos en Python. Sin importar tu nivel de habilidad, estos métodos forman la base de un manejo y análisis efectivo de datos en Python.
No dudes en responder a este boletín con cualquier pregunta o tema que te gustaría que cubriéramos en el futuro.
Si te gustó este boletín, no olvides suscribirte para recibir actualizaciones regulares. Comparte con tus amigos y colegas interesados en Python y crezcamos juntos en nuestra comunidad de programadores.
Recuerda, la clave para dominar es la práctica y la persistencia. ¡Happy coding! Hasta la próxima edición, ¡sigue programando! 👨💻
Boletín InfinitePy - Tu fuente para el aprendizaje e inspiración en Python.