Pandas: Lectura y escritura de datos
Pandas proporciona un amplio conjunto de funciones para leer y escribir en diversos formatos de datos. Además de los comunes CSV y Excel, también admite bases de datos SQL, tablas HTML, Parquet, entre otros formatos. Esta sección introduce estas funcionalidades adicionales de E/S para ayudarte a gestionar de forma flexible la importación y exportación de datos en diferentes escenarios.
Descripción general de las funciones principales de E/S
Las funciones de E/S de Pandas son muy potentes y admiten operaciones de lectura y escritura en múltiples formatos de datos. A continuación se presentan las funciones de lectura y escritura más utilizadas:
| Funciones de lectura | Funciones de escritura | Formatos compatibles | Escenarios típicos |
|---|---|---|---|
pd.read_csv() |
to_csv() |
CSV、TSV | Archivos de registro, datos tabulares |
pd.read_excel() |
to_excel() |
Excel(.xlsx, .xls) | Informes de negocio, datos financieros |
pd.read_sql() |
to_sql() |
Base de datos SQL | Interacción con bases de datos empresariales |
pd.read_html() |
- | Tablas HTML | Extracción de datos web |
pd.read_parquet() |
to_parquet() |
Apache Parquet | Análisis y almacenamiento de macrodatos |
pd.read_feather() |
to_feather() |
Formato Feather | Lectura/escritura rápida, datos en memoria |
pd.read_json() |
to_json() |
JSON | Datos de API, servicios web |
pd.read_pickle() |
to_pickle() |
Python pickle | Serialización de objetos de Python |
Los diferentes formatos tienen distintos casos de uso adecuados. CSV es un formato universal, pero los archivos son grandes; Parquet es de almacenamiento columnar, adecuado para análisis de big data; Excel es apropiado para inspección manual, pero no para grandes volúmenes de datos.
CSV y archivos de texto
CSV (valores separados por comas) es el formato de intercambio de datos más universal, y Pandas ofrece el soporte más completo para él.
Parámetros de lectura comunes
Ejemplo
# Lectura más básica
df = pd.read_csv("data.csv")
# Especificar el delimitador (por defecto CSV usa coma, TSV usa tabulador)
df_tsv = pd.read_csv("data.tsv", sep="\t")
# Especificar la codificación (común al procesar archivos en chino)
df_utf8 = pd.read_csv("data.csv", encoding="utf-8")
df_gbk = pd.read_csv("data.csv", encoding="gbk")
# Saltar filas (saltar filas después del encabezado o líneas de comentario)
df = pd.read_csv("data.csv", skiprows=3) # Saltar las primeras 3 filas
df = pd.read_csv("data.csv", skiprows=[2, 4]) # Saltar las filas 2 y 4
# Usar la fila de encabezado (por defecto la primera fila)
df = pd.read_csv("data.csv", header=0) # La fila 0 como encabezado
df = pd.read_csv("data.csv", header=None) # Sin encabezado, generar automáticamente 0,1,2...
# Especificar nombres de columnas
df = pd.read_csv("data.csv", names=["ID", "Nombre", "Edad", "Ciudad"])
# Especificar la columna de índice
df = pd.read_csv("data.csv", index_col=0) # La columna 0 como índice
df = pd.read_csv("data.csv", index_col=["Nombre"]) # Varias columnas como índice compuesto
Manejo de valores faltantes
Ejemplo
import numpy as np
# Especificar qué valores se consideran valores faltantes
df = pd.read_csv(
"data.csv",
na_values=["NA", "null", "NULL", "N/A", "", " "] # Estos valores se reconocerán como NaN
)
# Diferentes columnas pueden usar distintos marcadores de valores faltantes
df = pd.read_csv(
"data.csv",
na_values={
"Edad": ["Desconocido", "0"], # Valor faltante para la columna 'Edad'
"Ciudad": ["Desconocido"] # Valor faltante para la columna 'Ciudad'
}
)
# Conservar algunos valores como normales (que no se reconozcan como faltantes)
df = pd.read_csv("data.csv", keep_default_na=False)
Escritura de archivos CSV
Ejemplo
# Preparar datos de prueba
df = pd.DataFrame({
"Nombre": ["Zhang San", "Li Si", "Wang Wu"],
"Edad": [25, 30, 28],
"Ciudad": ["Beijing", "Shanghai", "Guangzhou"]
})
# Escribir CSV (con índice por defecto)
df.to_csv("output.csv")
# No escribir el índice
df.to_csv("output.csv", index=False)
# Especificar el delimitador
df.to_csv("output.csv", sep="\t")
# No escribir el encabezado
df.to_csv("output.csv", header=False)
# Especificar la codificación
df.to_csv("output.csv", encoding="utf-8-sig") # Con BOM, adecuado para abrir en Excel
Archivos JSON
JSON (Notación de Objetos JavaScript) es el formato de datos más común en aplicaciones web. Pandas ofrece funciones flexibles de lectura y escritura.
Estructura JSON y métodos de lectura
La estructura de datos JSON puede adoptar diversas formas; al leer, es necesario elegir los parámetros adecuados según la estructura real:
Ejemplo
import json
# Preparar datos JSON de prueba
data_records = '''
[
{"name": "Zhang San", "age": 25, "city": "Beijing"},
{"name": "Li Si", "age": 30, "city": "Shanghai"},
{"name": "Wang Wu", "age": 28, "city": "Guangzhou"}
]
'''
# Método 1: Array JSON (un objeto por línea) -> DataFrame
df = pd.read_json(data_records, orient="records")
print("orient='records':")
print(df)
print()
# Método 2: Objeto JSON (pares clave-valor) -> Series
data_dict = '{"name": "Zhang San", "age": 25, "city": "Beijing"}'
s = pd.read_json(data_dict, typ="series")
print(Leído como Series:)
print(s)
Formato JSON Lines
JSON Lines (.jsonl) es un formato en el que cada línea contiene un objeto JSON completo; se usa a menudo en registros y escenarios de big data:
Ejemplo
# Datos en formato JSON Lines
jsonl_data = '''{"name": "Zhang San", "age": 25}
{"name": "Li Si", "age": 30}
{"name": "Wang Wu", "age": 28}
{"name": "Zhao Liu", "age": 35}
'''
# Escribir archivo JSON Lines
with open("data.jsonl", "w", encoding="utf-8") as f:
f.write(jsonl_data)
# Leer JSON Lines (cada línea es un objeto JSON)
df = pd.read_json("data.jsonl", lines=True)
print(df)
Escritura de JSON
Ejemplo
df = pd.DataFrame({
"Nombre": ["Zhang San", "Li Si", "Wang Wu"],
"Edad": [25, 30, 28],
"Ciudad": ["Beijing", "Shanghai", "Guangzhou"]
})
# Escribir JSON con distintos valores de 'orient'
df.to_json("output_records.json", orient="records", force_ascii=False, indent=2)
df.to_json("output_index.json", orient="index", force_ascii=False, indent=2)
df.to_json("output_columns.json", orient="columns", force_ascii=False, indent=2)
# Formato JSON Lines
df.to_json("output.jsonl", orient="records", lines=True, force_ascii=False)
Serialización con Pickle
Pickle es el formato de serialización de objetos nativo de Python; puede guardar cualquier objeto de Python, incluidos DataFrames y estructuras anidadas complejas.
Ejemplo
import pickle
# Crear un DataFrame de estructura compleja
df = pd.DataFrame({
"A": range(10),
"B": range(10, 20),
"C": ["foo", "bar"] * 5
})
# Escribir archivo Pickle
df.to_pickle("data.pkl")
# Leer archivo Pickle
df_loaded = pd.read_pickle("data.pkl")
print(df_loaded)
# Escritura comprimida (compresión gzip, archivo más pequeño)
df.to_pickle("data.pkl.gz", compression="gzip")
df_loaded = pd.read_pickle("data.pkl.gz", compression="gzip")
El formato Pickle solo puede ser leído por Python, por lo que no es adecuado para el intercambio de datos entre lenguajes. Además, cargar archivos Pickle de fuentes no confiables implica riesgos de seguridad; no cargues archivos .pkl de origen desconocido.
Rendimiento y selección de escenarios
Los distintos formatos de datos tienen diferentes características de rendimiento; elegir el formato adecuado puede mejorar considerablemente la eficiencia:
| Formato | Velocidad de lectura | Velocidad de escritura | Tamaño del archivo | Escenario de uso |
|---|---|---|---|---|
| CSV | Lento | Medio | grande | Formato de intercambio universal, legible por humanos |
| Parquet | Muy rápida | Rápido | Muy pequeño | Análisis de big data, consultas por columnas |
| Feather | Extremadamente rápida | Extremadamente rápida | grande | Transferencia rápida de datos en memoria |
| Pickle | Rápido | Rápido | Medio | Persistencia de objetos de Python |
| JSON | Lento | Medio | Muy grande | API web, entre lenguajes |
Problemas comunes y precauciones
1. Memoria insuficiente al leer archivos grandes
Para archivos CSV o JSON muy grandes, se puede usarchunksizeel parámetro de lectura por bloques, evitando cargar todo en memoria de una vez.
2. Problemas de codificación de caracteres chinos
Al procesar archivos en chino, asegúrate de especificar la codificación correcta. Las codificaciones comunes incluyen utf-8, gbk, gb2312, utf-8-sig (BOM), entre otras.
3. Archivo dañado tras la escritura
Antes de escribir datos importantes, se recomienda leer y verificar primero. Al escribir archivos grandes, usar formato comprimido puede reducir la E/S del disco y disminuir el riesgo de corrupción de datos.
4. Limitaciones del formato Excel
La versión Excel 2003 (.xls) admite un máximo de 65536 filas por hoja, y la versión 2007 (.xlsx) admite un máximo de 1048576 filas. Si supera el límite, considere otros formatos.
Otras extensiones