Manejo de Dataframes en Python
Introducción:Manejo de Dataframes en Python
Un DataFrame es una de las estructuras de datos más potentes y utilizadas dentro de la biblioteca Pandas en Python, diseñada especialmente para el análisis y la manipulación de información tabular. Su principal característica es que organiza los datos en filas y columnas, de manera similar a una hoja de cálculo o una tabla en una base de datos.
Esta estructura permite trabajar con grandes volúmenes de información de forma eficiente, ofreciendo herramientas para filtrar, ordenar, combinar, agrupar y transformar datos con facilidad. Además, los DataFrames admiten distintos tipos de datos en cada columna (numéricos, de texto, fechas, booleanos, entre otros), lo que los hace extremadamente versátiles.
Gracias a su flexibilidad, los DataFrames se han convertido en un componente esencial en tareas de análisis de datos, ciencia de datos, machine learning y visualización, permitiendo a los desarrolladores y analistas extraer conocimiento valioso a partir de conjuntos de datos estructurados o no estructurados.
Definición: Dataframe
Un DataFrame en Pandas (Python) es una estructura de datos bidimensional que permite almacenar y manipular información en forma de tabla, similar a una hoja de cálculo de Excel o una tabla de base de datos.
Cada fila representa un registro u observación, y cada columna representa una variable o campo de datos.
Características Principales de Dataframes
- Estructura etiquetada: Las filas y columnas tienen etiquetas llamadas índices, lo que permite acceder fácilmente a los datos por nombre o posición.
- Tipos de datos mixtos: Cada columna puede contener un tipo de dato distinto (números, texto, fechas, valores booleanos, etc.).
- Manipulación sencilla: Permite filtrar, ordenar, agrupar, combinar y transformar datos de forma muy eficiente.
- Integración con otras herramientas: Es ampliamente usado en análisis de datos, machine learning y visualización, y puede leer/escribir datos desde múltiples formatos como CSV, Excel, SQL, JSON, entre otros.
Ejemplo Básico
import pandas as pd
# Crear un DataFrame a partir de un diccionario
data = {
'Nombre': ['Ana', 'Luis', 'Carlos', 'Eduardo', 'Natalia', 'Carmen'],
'Edad': [23, 30, 27, 53, 48, 38],
'Ciudad': ['Bogotá', 'Medellín', 'Cali', 'Bogotá', 'Cali', 'Medellín']
}
df = pd.DataFrame(data)
print(df)
# Salida esperada
# Nombre Edad Ciudad
# 0 Ana 23 Bogotá
# 1 Luis 30 Medellín
# 2 Carlos 27 Cali
# 3 Eduardo 53 Bogotá
# 4 Natalia 48 Cali
# 5 Carmen 38 Medellín
En resumen, un DataFrame es la herramienta principal de Pandas para manejar datos estructurados en Python, combinando la potencia de las listas y diccionarios con la facilidad de una tabla organizada.
Como se Usan los Dataframes
Acceder a los datos
Por columna:
df['Nombre'] # Devuelve la columna 'Nombre'
# Salida esperada
# 0 Ana
# 1 Luis
# 2 Carlos
# 3 Eduardo
# 4 Natalia
# 5 Carmen
# Name: Nombre, dtype: object
df[['Nombre', 'Ciudad']] # Devuelve varias columnas
# Salida esperada
# Nombre Ciudad
# 0 Ana Bogotá
# 1 Luis Medellín
# 2 Carlos Cali
# 3 Eduardo Bogotá
# 4 Natalia Cali
# 5 Carmen Medellín
Por filas (posición o etiqueta)::
df.iloc[0] # Accede a la primera fila (por índice)
# Salida esperada
# Nombre Ana
# Edad 23
# Ciudad Bogotá
# Name: 0, dtype: object
df.loc[1] # Accede a la fila con etiqueta 1
# Salida esperada
# Nombre Luis
# Edad 30
# Ciudad Medellín
# Name: 1, dtype: object
La diferencia entre loc e iloc en
Pandas se resume así:
| loc | iloc | |
|---|---|---|
| Tipo de acceso | Por etiquetas (nombres de filas o columnas) | Por posición numérica (índices 0, 1, 2, …) |
| Inclusión del rango final | Incluye el límite final | Excluye el límite final |
| Ejemplo | df.loc['a', 'Edad'] → usa nombres |
df.iloc[0, 1] → usa posiciones |
| Uso recomendado | Cuando se conocen las etiquetas | Cuando se conocen las posiciones |
Razones del porqué usar loc y no iloc:
- Mayor legibilidad:
lochace que el código sea más comprensible al usar nombres en lugar de números. - Menor riesgo de errores: Las etiquetas no cambian si se reordenan las filas o columnas, lo que evita confusiones.
- Más intuitivo: Trabajar con nombres de columnas es más natural en análisis de datos.
- Acceso combinado: Permite filtrar y seleccionar datos por etiquetas y condiciones en una sola línea.
Operaciones Comunes
Filtrado de Datos
El filtrado de datos en un DataFrame de Pandas permite seleccionar únicamente las filas que cumplen una o varias condiciones específicas. Es una de las operaciones más útiles para analizar información y obtener resultados precisos.
Se puede usar operadores lógicos para crear una condición que seleccione filas:
Sintaxis básica:
import pandas as pd
# Crear un DataFrame a partir de un diccionario
data = {
'Nombre': ['Ana', 'Luis', 'Carlos', 'Eduardo', 'Natalia', 'Carmen'],
'Edad': [23, 30, 27, 53, 48, 38],
'Ciudad': ['Bogotá', 'Medellín', 'Cali', 'Bogotá', 'Cali', 'Medellín']
}
df = pd.DataFrame(data)
# Filtrar las personas mayores de 25 años
filtro = df['Edad'] > 25
df_filtrado = df[filtro]
print(df_filtrado)
# Salida esperada
# Nombre Edad Ciudad
# 1 Luis 30 Medellín
# 2 Carlos 27 Cali
# 3 Eduardo 53 Bogotá
# 4 Natalia 48 Cali
# 5 Carmen 38 Medellín
Descripción Estadística
La descripción estadística es el proceso mediante el cual se resumen y analizan los datos para comprender sus características principales, sin realizar inferencias ni predicciones. Su propósito es explicar cómo se comportan los datos mediante valores numéricos, tablas o gráficos que muestran tendencias, variaciones y distribuciones.
El objetivo de la descripción estadística es entender la información contenida en un conjunto de datos de forma sencilla y cuantificable. Permite responder preguntas como:
- ¿Cuál es el valor promedio?
- ¿Cuánto varían los datos?
- ¿Cuáles son los valores mínimos y máximos?
- ¿Cómo se distribuyen los datos en general?
Sintaxis básica:
import pandas as pd
df = pd.DataFrame({
'Nombre': ['Ana', 'Luis', 'Carlos', 'María', 'Sofía'],
'Edad': [23, 30, 27, 22, 35],
'Ciudad': ['Bogotá', 'Cali', 'Medellín', 'Bogotá', 'Cali'],
'Salario': [2500, 3200, 2800, 2400, 3500]
})
# Descripción estadística del subconjunto
descripcion = df.describe()
print(descripcion)
# Salida esperada:
# Edad Salario
# count 5.000000 5.000000 Indica la cantidad de datos no nulos (no vacíos) en la columna.
# mean 27.400000 2880.000000 Representa la media aritmética o promedio de los valores de la columna.
# std 5.319774 465.832588 Es la desviación estándar, una medida de cuánto varían los datos respecto al promedio.
# min 22.000000 2400.000000 Muestra el valor mínimo encontrado en la columna.
# 25% 23.000000 2500.000000 Indica que el 25% de los valores son menores o iguales a este número
# 50% 27.000000 2800.000000 Es el valor central de los datos ordenados.
# 75% 30.000000 3200.000000 Indica que el 75% de los valores son menores o iguales a este número.
# max 35.000000 3500.000000 Muestra el valor máximo en la columna.
Importación en Análisis de Datos con Python
Importación de Archivos CSV
La capacidad de importar y exportar datos es fundamental en el análisis de datos, ya que la mayoría de los datos que utilizamos provienen de fuentes externas, como archivos CSV, Excel, bases de datos, o APIs. En Python, la librería Pandas simplifica enormemente estas tareas.
Estructura Básica
Un archivo CSV tiene una estructura muy simple:
Nombre,Edad,País
Ana,25,Colombia
Luis,30,México
María,28,Argentina
- La primera línea suele contener los nombres de las columnas (encabezados).
- Cada fila siguiente contiene los valores de cada registro.
- Los campos se separan por comas, aunque en algunos países o configuraciones se usa punto y coma (;).
Características Principales
- Es un archivo de texto plano, por lo que puede abrirse con cualquier editor (como Bloc de notas).
- Es ligero y fácil de compartir.
- Puede ser leído por hojas de cálculo (Excel, Google Sheets) y por lenguajes de programación como Python.
- No guarda formato visual (colores, fórmulas o estilos), solo datos estructurados.
Uso en Python con Pandas
import pandas as pd
df.to_csv('productos_modificados.csv', index=False)
Parámetros útiles de read_csv():
| Parámetro | Descripción | Ejemplo |
|---|---|---|
index |
Guarda solo los datos (False) |
index=False |
sep |
Separador (,, ;, \t) |
sep=';' |
header |
Indica si el archivo tiene encabezado | header=None |
names |
Define nombres de columnas manualmente | names=['Producto','Cantidad','Precio'] |
encoding |
Codificación del archivo | encoding='utf-8' |
usecols |
Selecciona columnas específicas | usecols=['Producto','Precio'] |
Opción A – Archivo local (desde tu computador): Importar un archivo CSV con Pandas:
import pandas as pd
# Subir archivo manualmente, agrega botón para escoger archivo local
archivo = files.upload()
# Leer el archivo CSV
df = pd.read_csv('productos.csv')
# Mostrar primeras filas
df.head()
Opción B – Archivo en una ruta local (PC o servidor):
import pandas as pd
# Cambia la ruta al lugar donde guardaste tu archivo
ruta = "C:/Users/Asus/Descargas/productos.csv" # 🧭 En Windows
# ruta = "/home/usuario/Documentos/productos.csv" # 🐧 En Linux/Mac
# Si el CSV usa punto y coma (;) como separador:
df = pd.read_csv(ruta, sep=';')
# Si el CSV usa coma (,) como separador (por defecto):
# df = pd.read_csv(ruta)
# Mostrar las primeras filas
print(df.head())
Opción C – Cargar CSV desde una URL:
url = "https://raw.githubusercontent.com/mwaskom/seaborn-data/master/tips.csv"
df = pd.read_csv(url)
df.head()
Opción D – Importar desde Colab:
from google.colab import drive
import pandas as pd
# Montar Google Drive
drive.mount('/content/drive')
# Cambia la ruta a donde está tu archivo
ruta = "/content/drive/MyDrive/productos.csv"
df = pd.read_csv(ruta)
df.head()
Ventajas de CSV
- Compatible con casi todas las aplicaciones.
- Fácil de generar y procesar.
- Ideal para intercambiar datos entre sistemas diferentes.
Desventajas de CSV
- No admite tipos de datos complejos (solo texto y números).
- No guarda formato ni fórmulas.
- Puede generar errores si el separador (coma o punto y coma) no se interpreta correctamente.
Importación de Archivos Excel
La importación de archivos Excel en pandas con Python es una tarea fundamental en el análisis de datos, ya que permite leer información almacenada en hojas de cálculo y convertirla en estructuras de datos manipulables, como los DataFrames. A continuación se explica paso a paso cómo se realiza este proceso.
Requisitos Previos para Importar Documentos Excel
Antes de importar archivos Excel, es necesario tener instalada la biblioteca pandas y el motor de lectura de Excel, como openpyxl o xlrd.
En la terminal o consola de Python se deben ejecutar los siguientes comandos:
pip install pandas openpyxl
Nota: openpyxl se utiliza para leer y escribir archivos Excel con extensión .xlsx. En versiones actuales de pandas, xlrd ya no soporta este formato.
Cargar un Archivo Excel
'datos.xlsx' es el nombre del archivo que se encuentra en la misma carpeta del script.
df = pd.read_excel('datos.xlsx')
Si el archivo está en otra ubicación, se debe incluir la ruta completa:
df = pd.read_excel('C:/Usuarios/Eduardo/Documentos/datos.xlsx')
Especificar una Hoja (sheet)
Un archivo Excel puede tener varias hojas.
Para leer una hoja específica se usa el parámetro sheet_name:
df = pd.read_excel('datos.xlsx', sheet_name='Hoja1')
También se puede leer varias hojas al mismo tiempo (retorna un diccionario de DataFrames):
datos = pd.read_excel('datos.xlsx', sheet_name=['Hoja1', 'Hoja2'])
Parámetros Útiles en read_excel()
| Parámetro | Descripción | Ejemplo |
|---|---|---|
usecols |
Selecciona columnas específicas | usecols=['Nombre', 'Edad'] |
nrows |
Limita el número de filas leídas | nrows=10 |
skiprows |
Omite filas iniciales | skiprows=1 |
header |
Define la fila donde están los nombres de columnas | header=2 |
dtype |
Establece el tipo de dato de columnas | dtype={'Edad': int} |
Verificar los Datos Importados
Después de la carga, es buena práctica inspeccionar el contenido del DataFrame:
print(df.head()) # Muestra las primeras 5 filas
print(df.info()) # Muestra información general
print(df.describe()) # Estadísticas básicas
Importación de Otras Fuentes
Archivos de Texto Plano (.txt)
Los archivos .txt se pueden importar con el mismo método que los CSV, especificando el separador.
df = pd.read_csv('datos.txt', sep='\t') # separados por tabulación
df = pd.read_csv('datos.txt', delim_whitespace=True) # separados por espacios
Archivos JSON (JavaScript Object Notation)
df = pd.read_json('https://api.exemplo.com/usuarios.json')
pandas convierte automáticamente el contenido JSON en un DataFrame, si tiene estructura tabular.
Bases de Datos SQL
Pandas puede conectarse directamente a bases de datos como MySQL, PostgreSQL, SQLite, etc.
Ejemplo con SQLite:
import sqlite3
import pandas as pd
conexion = sqlite3.connect('empresa.db')
df = pd.read_sql_query("SELECT * FROM empleados", conexion)
conexion.close()
Ejemplo con MySQL o PostgreSQL:
Requiere instalar sqlalchemy y el conector correspondiente:
pip install sqlalchemy pymysql
from sqlalchemy import create_engine
engine = create_engine('mysql+pymysql://usuario:contraseña@localhost/base_datos')
df = pd.read_sql('SELECT * FROM clientes', engine)
Datos desde una URL o API
Ejemplo con CSV en línea:
url = 'https://raw.githubusercontent.com/datasets/covid-19/main/data/countries-aggregated.csv'
df = pd.read_csv(url)
Ejemplo con JSON desde una API:
url = 'https://api.coindesk.com/v1/bpi/currentprice.json'
df = pd.read_json(url)
Archivos Parquet (columnar data)
El formato Parquet es muy usado en Big Data por su eficiencia.
df.to_parquet('nuevo.parquet')
Exportación en Análisis de Datos con Python
Lorem ipsum dolor sit amet consectetur adipisicing elit. Consectetur aut, nobis quam, natus eaque atque unde mollitia nostrum, reprehenderit ipsa aliquid voluptatibus? Perspiciatis corrupti.