Volver al curso

Data Science con Python: Análisis de Datos para Tu Carrera

leccion
7 / 23
intermediate
8 horas
Pandas y Manipulacion de Datos

Lectura y Escritura de Archivos de Datos

Lectura
50 min~4 min lectura

Lectura y Escritura de Archivos de Datos

De Archivos a DataFrames

En el mundo real, los datos no se crean manualmente. Vienen de archivos CSV, hojas de Excel, bases de datos, APIs y mas. Pandas tiene funciones para leer practicamente cualquier formato de datos.


Leer Archivos CSV

CSV (Comma-Separated Values) es el formato mas comun en data science.

import pandas as pd

# Lectura basica
df = pd.read_csv('ventas_2025.csv')

# Con parametros comunes
df = pd.read_csv(
    'datos.csv',
    sep=';',                    # Separador (a veces es ; en lugar de ,)
    encoding='latin-1',          # Para archivos con caracteres especiales
    header=0,                    # Fila del encabezado (0 = primera)
    index_col='id',              # Columna como indice
    usecols=['id', 'nombre', 'monto'],  # Solo leer estas columnas
    nrows=1000,                  # Solo leer las primeras 1000 filas
    na_values=['N/A', '-', ''],  # Valores que son NaN
    dtype={'codigo': str}        # Forzar tipo de dato
)

print(df.head())
print(df.info())

Leer desde URL

# Leer un CSV directamente desde internet
url = 'https://raw.githubusercontent.com/datasciencedojo/datasets/master/titanic.csv'
df_titanic = pd.read_csv(url)

print(f"Forma: {df_titanic.shape}")
print(f"Columnas: {df_titanic.columns.tolist()}")
print(df_titanic.head())

Datasets de practica

Estos son datasets publicos que podes usar para practicar:

# Dataset de Iris (clasificacion)
from sklearn.datasets import load_iris
iris = load_iris(as_frame=True)
df_iris = iris.frame

# Seaborn viene con datasets integrados
import seaborn as sns
df_tips = sns.load_dataset('tips')        # Propinas en restaurante
df_penguins = sns.load_dataset('penguins')  # Pinguinos Palmer
df_flights = sns.load_dataset('flights')  # Vuelos de aerolineas

Leer Archivos Excel
# Lectura basica
df = pd.read_excel('reporte_ventas.xlsx')

# Con parametros
df = pd.read_excel(
    'reporte.xlsx',
    sheet_name='Enero',       # Nombre de la hoja
    header=1,                  # Encabezado en fila 2
    usecols='A:E',            # Solo columnas A a E
    skiprows=3                # Saltar las primeras 3 filas
)

# Leer todas las hojas
todas_hojas = pd.read_excel('reporte.xlsx', sheet_name=None)
for nombre, df_hoja in todas_hojas.items():
    print(f"Hoja: {nombre}, Filas: {len(df_hoja)}")

Guardar Archivos
# Guardar como CSV
df.to_csv('resultado.csv', index=False)

# Guardar como Excel
df.to_excel('resultado.xlsx', index=False, sheet_name='Datos')

# Guardar multiples hojas en Excel
with pd.ExcelWriter('reporte_completo.xlsx') as writer:
    df_ventas.to_excel(writer, sheet_name='Ventas', index=False)
    df_costos.to_excel(writer, sheet_name='Costos', index=False)
    df_resumen.to_excel(writer, sheet_name='Resumen', index=False)

# Guardar en formato Parquet (mas eficiente para datasets grandes)
df.to_parquet('datos.parquet')

Leer desde Bases de Datos
from sqlalchemy import create_engine

# Conectar a PostgreSQL
engine = create_engine('postgresql://usuario:password@localhost:5432/mi_base')

# Leer con SQL
df = pd.read_sql('SELECT * FROM ventas WHERE fecha >= 2025-01-01', engine)

# Leer tabla completa
df = pd.read_sql_table('clientes', engine)

# Guardar DataFrame a SQL
df.to_sql('resultados', engine, if_exists='replace', index=False)

Leer desde APIs
import requests

# Ejemplo: API publica de datos
url = 'https://api.worldbank.org/v2/country/ARG/indicator/NY.GDP.MKTP.CD?format=json&per_page=50'
respuesta = requests.get(url)
datos = respuesta.json()

# Convertir JSON a DataFrame
df_pib = pd.DataFrame(datos[1])  # El segundo elemento tiene los datos
df_pib = df_pib[['date', 'value']].dropna()
df_pib.columns = ['Anio', 'PIB_USD']
df_pib['PIB_USD'] = df_pib['PIB_USD'].astype(float)

print(df_pib.head(10))

Manejo de Datos Grandes

Cuando tenes datasets de millones de filas:

# Leer en chunks (pedazos)
chunks = pd.read_csv('archivo_grande.csv', chunksize=100000)

resultados = []
for chunk in chunks:
    # Procesar cada chunk
    resumen = chunk.groupby('categoria')['monto'].sum()
    resultados.append(resumen)

final = pd.concat(resultados).groupby(level=0).sum()
print(final)

# Solo leer las columnas que necesitas
df = pd.read_csv('grande.csv', usecols=['fecha', 'monto', 'categoria'])

# Usar dtypes eficientes
df = pd.read_csv('grande.csv', dtype={
    'id': 'int32',
    'monto': 'float32',
    'categoria': 'category'
})
print(f"Memoria: {df.memory_usage(deep=True).sum() / 1e6:.1f} MB")

Video Recomendado

Como Leer Datos con Pandas - CSV, Excel, SQL


Ejercicio Practico

Crea un notebook 07_lectura_datos.ipynb:

  1. Descarga el dataset del Titanic desde la URL que vimos arriba
  2. Explora el dataset (head, info, describe, shape)
  3. Lee un dataset de Seaborn (tips o penguins)
  4. Guarda el resultado como CSV y como Excel
  5. Practica leyendo con diferentes parametros: encoding, sep, usecols

💡 Concepto Clave

Revisemos los puntos más importantes de esta lección antes de continuar.

Resumen

  • read_csv(): El mas usado, para archivos CSV
  • read_excel(): Para archivos .xlsx con multiples hojas
  • read_sql(): Leer directamente desde bases de datos
  • to_csv() / to_excel(): Guardar resultados
  • Chunks: Para archivos que no caben en memoria
  • dtypes: Optimizar uso de memoria con tipos eficientes
🧠 Pon a prueba tu conocimiento
¿Cuál es el aspecto más importante que aprendiste en esta lección?
  • Comprendo el concepto principal y puedo explicarlo con mis palabras
  • Entiendo cómo aplicarlo en mi situación específica
  • Necesito repasar algunas partes antes de continuar
  • Quiero ver más ejemplos prácticos del tema
✅ ¡Excelente! Continúa con la siguiente lección para profundizar más.