• Saltar al contenido principal
  • Skip to secondary menu
  • Saltar a la barra lateral principal
  • Saltar al pie de página
  • Inicio
  • Secciones
    • Ciencia de datos
    • Criptografía
    • Herramientas
    • Machine Learning
    • Noticias
    • Opinión
    • Productividad
    • Programación
      • JavaScript
      • Julia
      • Matlab
      • Python
      • R
  • Programación
    • JavaScript
    • Julia
    • Matlab
    • Python
    • R
  • Laboratorio
    • Estadística
      • Calculadora del Tamaño Muestral en Encuestas
      • Calculadora de estadísticos descriptivos
      • Test de normalidad
      • Calculadora de contrastes de hipotesis
      • Calculadora de tamano del efecto
      • Simulador de Regresión Lineal con Ruido
      • Visualizador de PCA
      • Visualizador de Series Temporales
      • Simulador de Regresión Logística
      • Simulador de K-Means
      • Simulador de DBSCAN
      • Detector de la Ley de Benford
    • Probabilidad
      • Calculadora de Probabilidad de Distribuciones
      • Calculadora de Probabilidades de Lotería
      • Simulador del Problema de Monty Hall
      • Simulador de la Estrategia Martingala
    • Finanzas
      • Calculadora de Préstamos e Hipotecas
      • Conversor TIN ↔ TAE
      • Calculadora DCA con ajuste por inflación
      • Calculadora XIRR con Flujos Irregulares
      • Simulador FIRE (Financial Independence, Retire Early)
    • Negocios
      • CLV
      • Scoring
    • Herramientas
      • Formateador / Minificador de JSON
      • Conversor CSV ↔ JSON
      • Comparador y Formateador de Texto y JSON
      • Formateador y Tester de Expresiones Regulares
      • Inspector de JWT
      • Generador y verificador de hashes
      • Codificador / Decodificador Base64 y URL
      • Conversor de bases numericas
      • Conversor de Timestamp Unix
      • Conversor de colores
      • Generador de UUIDs
    • Juegos
      • Tres en Raya
      • Nim con Q-Learning
    • Más
      • Método D’Hondt
      • Generador de Contraseñas Seguras
  • Noticias
  • Boletín
  • Contacto
  • Tienda
    • Libros
    • Equipamiento de oficina
    • Equipamiento en movilidad

Analytics Lane

Ciencia e ingeniería de datos aplicada

  • Ciencia de datos
  • Machine Learning
  • IA Generativa
  • Python
  • Pandas
  • NumPy
  • R
  • Excel

Procesado de datos en Python con collections

septiembre 9, 2024 Por Daniel Rodríguez Deja un comentario
Tiempo de lectura: 6 minutos

Python cuenta con múltiples estructuras de datos nativas del lenguaje (listas, diccionarios, tuplas y conjuntos) que son fundamentales para los desarrolladores. Aunque, para ciertas tareas complejas, pueden no ser suficiente. En estos casos, se puede recurrir al módulo collections. Este módulo proporciona estructuras de datos avanzadas que se puede usar para simplificar el procesado de datos en Python. En esta entrada, se analizarán cinco de estas estructuras: Counter, defaultdict, OrderedDict, namedtuple y deque.

Tabla de contenidos

  • 1 Las colecciones de collections
  • 2 1. Counter
  • 3 2. defaultdict
  • 4 3. OrderedDict
  • 5 4. namedtuple
  • 6 5. deque
  • 7 Conclusiones

Las colecciones de collections

En esta entrada se verá cómo usar las siguientes colecciones del módulo collections:

  • Counter es una subclase de diccionario especializada en contar elementos hashables. Es útil para llevar un registro de la frecuencia de los elementos en una colección, cómo contar caracteres en una cadena o palabras en una lista.
  • defaultdict es una subclase de diccionario que proporciona un valor por defecto para claves inexistentes. Eliminando la necesidad de verificar la existencia de una clave antes de modificar su valor, lo que simplifica el código y mejora la legibilidad.
  • OrderedDict es una subclase de diccionario que mantiene el orden de inserción de los elementos. Dado que los diccionarios son elementos ”desordenados”, es necesario recurrir a esta colección cuando se necesita garantizar el orden en estos objetos. Algo crucial cuando el orden de los datos afecta el resultado, como en el procesamiento de secuencias o la generación de informes.
  • namedtuple es una función para crear tuplas con nombre, es decir, tuplas cuyos elementos pueden ser accedidos mediante nombres en lugar de índices. Esto mejora la legibilidad del código y facilita la gestión de datos estructurados.
  • deque (double-ended queue) es una estructura de datos que permite añadir y quitar elementos por ambos extremos de manera eficiente. Es ideal para implementar colas y pilas, donde las operaciones de inserción y eliminación son frecuentes en ambos extremos.

Una vez visto qué hace cada una de las colecciones, se puede comprender mejor su funcionamiento a través de diferentes ejemplos prácticos.

Nuevo test de normalidad interactivo en el laboratorio de Analytics Lane
En Analytics Lane
Nuevo test de normalidad interactivo en el laboratorio de Analytics Lane

1. Counter

Counter es una herramienta del módulo collections que se utiliza para contar elementos hashables de manera eficiente. Siendo especialmente útil cuando se necesita llevar un registro de la frecuencia de elementos en una secuencia. Lo que se puede ver en el siguiente código:

from collections import Counter

# Contar caracteres en una cadena
cadena = "abracadabra"
contador = Counter(cadena)
print(contador)

# Contar palabras en una lista
palabras = ["apple", "banana", "apple", "orange", "banana", "banana"]
contador_palabras = Counter(palabras)
print(contador_palabras)

# Métodos útiles de Counter
print(contador.most_common(2))  # Los dos elementos más comunes
print(list(contador.elements()))  # Lista de elementos expandida
Counter({'a': 5, 'b': 2, 'r': 2, 'c': 1, 'd': 1})
Counter({'banana': 3, 'apple': 2, 'orange': 1})
[('a', 5), ('b', 2)]
['a', 'a', 'a', 'a', 'a', 'b', 'b', 'r', 'r', 'c', 'd']

En este código, Counter no solo cuenta elementos, sino que también proporciona métodos útiles como most_common(), que devuelve una lista de los elementos más comunes, y elements(), que devuelve un iterador sobre los elementos. Estos métodos permiten analizar y manipular los datos contados de manera eficiente.

Publicidad


2. defaultdict

defaultdict es una subclase de diccionario que devuelve un valor por defecto si la clave no existe. Este valor por defecto se define cuando se crea el defaultdict y puede ser cualquier tipo de objeto o función que se pueda llamar. Lo que se puede ver en el siguiente código:

from collections import defaultdict

# Definir un defaultdict con valor por defecto como lista
default_dict = defaultdict(list)

# Añadir elementos a listas dentro del defaultdict
default_dict["fruits"].append("apple")
default_dict["fruits"].append("banana")
default_dict["vegetables"].append("carrot")
print(default_dict)


# Definir un defaultdict con valor por defecto como entero
count_dict = defaultdict(int)
items = ["apple", "banana", "apple", "orange"]
for item in items:
    count_dict[item] += 1
print(count_dict)
defaultdict(<class 'list'>, {'fruits': ['apple', 'banana'], 'vegetables': ['carrot']})
defaultdict(<class 'int'>, {'apple': 2, 'banana': 1, 'orange': 1})

En este código, defaultdict simplifica el código al eliminar la necesidad de inicializar manualmente los valores de las claves. En el primer ejemplo, cada nueva clave tiene como valor por defecto una lista vacía, permitiendo agregar elementos directamente. En el segundo ejemplo, cada nueva clave tiene un valor por defecto de 0, facilitando el conteo de elementos.

3. OrderedDict

OrderedDict es una subclase de diccionario que mantiene el orden de inserción de los elementos. A diferencia de los diccionarios normales (en versiones de Python anteriores a 3.7), OrderedDict recuerda el orden en que se insertaron los elementos, lo cual es útil en muchas aplicaciones donde el orden de los datos es importante. Lo que se puede ver en el siguiente código:

from collections import OrderedDict

# Crear un OrderedDict
ordered_dict = OrderedDict()
ordered_dict["apple"] = 3
ordered_dict["banana"] = 2
ordered_dict["orange"] = 1
print(ordered_dict)

# Iterar sobre un OrderedDict
for key, value in ordered_dict.items():
    print(key, value)

# Mover un elemento al final o al principio
ordered_dict.move_to_end("banana")
print(ordered_dict)

ordered_dict.move_to_end("banana", last=False)
print(ordered_dict)
OrderedDict([('apple', 3), ('banana', 2), ('orange', 1)])
apple 3
banana 2
orange 1
OrderedDict([('apple', 3), ('orange', 1), ('banana', 2)])
OrderedDict([('banana', 2), ('apple', 3), ('orange', 1)])

En este ejemplo, OrderedDict se usa para preservar el orden de inserción de los elementos. Esto puede ser crucial en aplicaciones donde el orden de los datos afecta el resultado, como en el procesamiento de secuencias o en la generación de informes. Además, métodos como move_to_end() permiten reordenar elementos de manera eficiente.

4. namedtuple

namedtuple es una función del módulo collections que permite crear tuplas con nombre. Esto significa que los elementos de la tupla pueden ser accedidos mediante nombres en lugar de índices, mejorando la legibilidad y manejabilidad del código. Lo que se puede ver en el siguiente código:

from collections import namedtuple

# Definir un namedtuple
Persona = namedtuple("Persona", ["nombre", "edad", "ocupacion"])

# Crear una instancia de namedtuple
persona1 = Persona("Juan", 28, "Ingeniero")
print(persona1)

# Acceder a los elementos por nombre
print(persona1.nombre)
print(persona1.edad)
print(persona1.ocupacion)

# Convertir namedtuple a diccionario
print(persona1._asdict())
Persona(nombre='Juan', edad=28, ocupacion='Ingeniero')
Juan
28
Ingeniero
{'nombre': 'Juan', 'edad': 28, 'ocupacion': 'Ingeniero'}

Como se puede ver en el código anterior, namedtuple mejora la legibilidad al permitir el acceso a los elementos por nombre en lugar de por índice. Esto es particularmente útil en aplicaciones que manejan datos estructurados, como registros de base de datos o respuestas de API. Además, namedtuple incluye métodos adicionales como _asdict(), que convierte la tupla en un diccionario, facilitando su manipulación.

Publicidad


5. deque

deque (double-ended queue) es una estructura de datos que permite añadir y quitar elementos por ambos extremos de manera eficiente. A diferencia de las listas, donde las operaciones de inserción y eliminación en ambos extremos pueden ser costosas en términos de tiempo, deque está optimizado para estas operaciones. El uso de esta componente se puede ver en el siguiente ejemplo:

from collections import deque

# Crear una deque
dq = deque()

# Añadir elementos al final y al principio
dq.append("a")
dq.append("b")
dq.appendleft("c")
print(dq)

# Quitar elementos del final y del principio
dq.pop()
dq.popleft()
print(dq)

# Rotar elementos
dq.extend(["d", "e", "f"])
print(dq)
dq.rotate(1)  # Rotar a la derecha
print(dq)
dq.rotate(-1)  # Rotar a la izquierda
print(dq)
deque(['c', 'a', 'b'])
deque(['a'])
deque(['a', 'd', 'e', 'f'])
deque(['f', 'a', 'd', 'e'])
deque(['a', 'd', 'e', 'f'])

Como se puede ver en el ejemplo, deque es extremadamente eficiente para operaciones que añaden o quitan elementos de ambos extremos. Métodos como append(), appendleft(), pop() y popleft() permiten manipular la estructura de datos fácilmente. Además, deque proporciona operaciones avanzadas como rotate(), que permite rotar los elementos, facilitando la implementación de algoritmos más complejos.

Conclusiones

El módulo collections de Python es un módulo que se debe conocer cualquier desarrollador. Al proporcionar estructuras de datos avanzadas que simplifican la gestión y manipulación de datos, se puede conseguir un código mas eficiencia y legible. Ya sea contando elementos con Counter, manejando valores por defecto con defaultdict, preservando el orden de inserción con OrderedDict, creando estructuras de datos legibles con namedtuple o manipulando secuencias de manera eficiente con deque, collections ofrece soluciones elegantes, fáciles de implementar y eficaces para resolver muchos problemas comunes.

Imagen de StockSnap en Pixabay

¿Te ha parecido de utilidad el contenido?

¡Puntúalo entre una y cinco estrellas!

Puntuación promedio 0 / 5. Votos emitidos: 0

Ya que has encontrado útil este contenido...

¡Síguenos en redes sociales!

¡Siento que este contenido no te haya sido útil!

¡Déjame mejorar este contenido!

Dime, ¿cómo puedo mejorar este contenido?

Publicaciones relacionadas

  • Nuevo test de normalidad interactivo en el laboratorio de Analytics Lane
  • Nuevo conversor de timestamp Unix en el laboratorio de Analytics Lane
  • Calculadora de Contrastes de Hipótesis: interpreta correctamente el p-valor y toma decisiones estadísticas con confianza
  • Calculadora de Tamaño del Efecto: la herramienta clave para entender cuánto importa realmente una diferencia
  • Simulador de DBSCAN: descubre cómo encontrar clusters reales (y ruido) sin fijar K
  • Conversor de Colores: convierte, compara y valida cualquier color en tiempo real
  • Analytics Lane lanza su Generador de UUIDs: identificadores únicos, seguros y listos para producción en segundos
  • 1200 publicaciones en Analytics Lane
  • Analytics Lane lanza su Conversor TIN ↔ TAE: la herramienta definitiva para entender el coste real de depósitos, préstamos e hipotecas

Publicado en: Python

Interacciones con los lectores

Deja una respuesta Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

I accept the Terms and Conditions and the Privacy Policy

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Barra lateral principal

Suscríbete a nuestro boletín

Suscríbete al boletín semanal para estar al día de todas las publicaciones.

Política de Privacidad

Analytics Lane en redes sociales

  • Amazon
  • Bluesky
  • Facebook
  • GitHub
  • Instagram
  • Mastodon
  • Pinterest
  • RSS
  • Telegram
  • Tumblr
  • Twitter
  • YouTube

Publicidad

Entradas recientes

De la Regresión Logística al Scorecard: La Transformación Matemática

mayo 19, 2026 Por Daniel Rodríguez

Noticias

Analytics Lane lanza la versión 1.1 del laboratorio con nuevas suites de CLV y Scoring

mayo 18, 2026 Por Daniel Rodríguez

Interés compuesto: la fuerza que multiplica tu dinero (y los errores que la anulan)

mayo 14, 2026 Por Daniel Rodríguez

Publicidad

Es tendencia

  • Gráficos de correlación en Seaborn: Mapas de calor y gráficos de pares publicado el julio 27, 2023 | en Python
  • Media, mediana y moda: Descubre cómo interpretar las medidas de tendencia central con ejemplos claros y sin complicaciones publicado el mayo 16, 2025 | en Ciencia de datos
  • Gráficos de barras en Matplotlib publicado el julio 5, 2022 | en Python
  • Números calientes en Bonoloto: mismos resultados que el azar publicado el octubre 9, 2020 | en Opinión
  • Cómo encontrar la posición de elementos en una lista de Python publicado el abril 12, 2021 | en Python

Publicidad

Lo mejor valorado

4.9 (24)

Seleccionar filas y columnas en Pandas con iloc y loc

4.6 (16)

Archivos JSON con Python: lectura y escritura

4.4 (14)

Ordenación de diccionarios en Python mediante clave o valor

4.7 (13)

Operaciones de filtrado de DataFrame con Pandas en base a los valores de las columnas

4.1 (11)

Aplicar el método D’Hondt en Excel

Comentarios recientes

  • bif en JSON en bases de datos: cuándo es buena idea y cuándo no
  • bif en Cómo desinstalar Oracle Database 19c en Windows
  • M. Pilar en Cómo eliminar las noticias en Windows 11 y recuperar tu concentración
  • Daniel Rodríguez en Probabilidad básica: cómo entender el azar en nuestra vida diaria
  • Pepe en Probabilidad básica: cómo entender el azar en nuestra vida diaria

Publicidad


Footer

Analytics Lane

  • Acerca de Analytics Lane
  • Boletín de noticias
  • Contacto
  • Libros
  • Lo más popular
  • Noticias
  • Tienda
  • Tiendas afiliadas

Secciones

  • Ciencia de datos
  • Criptografía
  • Herramientas
  • Machine Learning
  • Opinión
  • Productividad
  • Programación
  • Reseñas

Sobre de Analytics Lane

En Analytics Lane tratamos de explicar los principales conceptos de la ciencia e ingeniería de datos con un enfoque práctico. Los principales temas tratados son ciencia de datos, ingeniería de datos, inteligencia artificial, machine learning, deep learning y criptografía. Además, también se habla de los principales lenguajes de programación y herramientas utilizadas por los científicos e ingenieros de datos.

Copyright © 2018-2026 Analytics Lane ·Términos y condiciones ·Política de Cookies ·Política de Privacidad ·Herramientas de privacidad ·Contacto