Jupyter Notebook atajos de teclado comunes y trucos prácticos

Jupyter Notebook es el entorno de desarrollo interactivo más popular en el campo de la ciencia de datos y el aprendizaje automático. Dominar sus atajos de teclado y trucos puede mejorar enormemente la eficiencia del desarrollo diario.

Puedes hacer clic en el menú Ayuda para ver los atajos de teclado:

Todos los atajos de teclado de este artículo se basan enWindows/Linuxcomo referencia. Los usuarios de Mac deben cambiarCtrlporCmdy cambiarAltporOption。


Dos modos de operación

Jupyter Notebook tiene dos modos,todos los atajos de teclado dependen del modo actual, un punto clave que los principiantes tienden a pasar por alto:

Modo Color del borde de la celda Cómo entrar Función
Modo comando (Command Mode) Azul segúnEsco haz clic en el área en blanco a la izquierda de la celda Realizar operaciones de gestión en la celda (añadir, eliminar, mover, etc.)
Modo edición (Edit Mode) Verde segúnEntero haz doble clic dentro de la celda Escribir y modificar código o texto dentro de la celda

Regla mnemotécnica simple:Verde = se puede escribir y editar; azul = se puede gestionar la celda. Antes de entrar en el modo edición, usa primeroEscpara salir, y luego usaEnterpara entrar. Adquirir este hábito puede evitar muchos errores de operación.


Atajos de teclado para ejecutar celdas (universales)

Los siguientes tres atajos se pueden usar en ambos modos, son las operaciones más frecuentes y debes memorizarlos:

Atajo de teclado Función Escenario de uso
Shift + Enter Ejecutar la celda actual y saltar automáticamente a la siguiente celda El más común, ejecuta el código secuencialmente hacia abajo
Ctrl + Enter Ejecutar la celda actual y permanecer en la celda actual Se usa para probar repetidamente el mismo código
Alt + Enter Ejecutar la celda actual e insertar una nueva celda debajo Se usa cuando se añaden bloques de código hacia abajo mientras se ejecuta

Atajos de teclado del modo comando (borde azul)

segúnEscDespués de entrar en el modo comando, se pueden usar los siguientes atajos:

1. Inserción y eliminación de celdas

Atajo de teclado Función
A En la celda actualarribaInsertar nueva celda (Above)
B En la celda actualdebajoInsertar nueva celda (Below)
D, D(pulsar D dos veces) Eliminar la celda actual
Z Deshacer eliminación (restaurar la celda recién eliminada)
X Cortar la celda actual
C Copiar la celda actual
V Pegar celda debajo de la celda actual
Shift + V Pegar celda encima de la celda actual

2. Cambio de tipo de celda

Hay tres tipos de celda en Jupyter, se puede cambiar en cualquier momento:

Atajo de teclado Cambiar a Uso
Y Code (código) Escribir y ejecutar código Python
M Markdown (lenguaje de marcado) Escribir documentos formateados, títulos y textos descriptivos
R Raw (texto sin procesar) Genera el texto tal cual, no lo ejecuta ni lo renderiza
1 ~ 6 Niveles de encabezado de Markdown H1 ~ H6 Convierte rápidamente la celda en un encabezado del nivel correspondiente (cambia automáticamente al modo Markdown)

3. Selección y combinación de celdas

Atajo de teclado Función
↑ / K Seleccionar la celda superior
↓ / J Seleccionar la celda inferior
Shift + ↑ / Shift + K Seleccionar varias celdas continuas hacia arriba
Shift + ↓ / Shift + J Seleccionar varias celdas continuas hacia abajo
Shift + M Combinar las celdas seleccionadas en una sola

4. Control de salida y visualización

Atajo de teclado Función
O Plegar/desplegar el resultado de salida de la celda actual
Shift + O Alternar el modo de desplazamiento del área de salida de la celda actual (se usa cuando el contenido de salida es muy largo)
L Mostrar/ocultar los números de línea de la celda actual
F Buscar y reemplazar texto en la celda

5. Operaciones del kernel y la interfaz

Atajo de teclado Función
I, I(pulsar I dos veces) Interrumpir la celda que se está ejecutando actualmente (equivalente a Ctrl+C)
0, 0(pulsar 0 dos veces) Reiniciar el kernel (borrará todas las variables que se han ejecutado,úsalo con precaución)
H Abrir el panel de ayuda de atajos de teclado (muestra todos los atajos disponibles)
P Abrir la paleta de comandos, se puede buscar todas las funciones de Jupyter
Space Desplazarse hacia abajo en la página
Shift + Space Desplazarse hacia arriba en la página
S / Ctrl + S Guardar el Notebook

Atajos de teclado del modo edición (borde verde)

segúnEnterDespués de entrar en el modo edición, se pueden usar los siguientes atajos para operar dentro de la celda:

1. Edición de código

Atajo de teclado Función
Tab Autocompletado de código (después de escribir parte del nombre de una función/variable, pulsa Tab para completar)
Shift + Tab Ver la documentación de parámetros de la función donde está el cursor (aparece una ventana de documentación: una pulsación muestra un resumen, dos pulsaciones muestran el documento completo)
Ctrl + / Comentar/descomentar la línea actual o las líneas de código seleccionadas
Ctrl + D Eliminar la línea completa actual
Ctrl + Shift + - Dividir la celda actual en dos celdas en la posición del cursor
Ctrl + Z Deshacer (restaurar la edición anterior)
Ctrl + Y Rehacer (cancelar deshacer)
Ctrl + A Seleccionar todo el contenido de la celda actual
Ctrl + Home Saltar al principio del contenido de la celda
Ctrl + End Saltar al final del contenido de la celda
Ctrl + ← / Ctrl + → Mover el cursor por palabras (saltar rápidamente a la palabra anterior/siguiente)

2. Volver del modo edición al modo comando

Atajo de teclado Función
Esc Salir del modo de edición y volver al modo de comando (el borde de la celda se vuelve azul)
Ctrl + M Igual que Esc, salir del modo de edición

Comandos mágicos (Magic Commands)

Los comandos mágicos son instrucciones especiales integradas en Jupyter, que comienzan con%(de una sola línea) o%%o (de toda la celda), para realizar tareas comunes como medición de tiempo, depuración, operaciones con archivos,se pueden usar sin necesidad de instalar ninguna biblioteca。

1. Cronometraje de código

Ejemplo

# %timeit: mide el tiempo varias veces para una sola línea de código y toma el promedio; el resultado es más preciso (adecuado para probar el rendimiento de expresiones cortas)
%timeit [x**2 for x in range(1000)]
# Ejemplo de salida: 98.3 µs ± 1.2 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

# %%time: cronometra el código de toda la celda solo una vez (adecuado para probar flujos completos que tardan mucho)
%%time
import time
data = [x**2 for x in range(100000)]
time.sleep(1)
# Ejemplo de salida:
# CPU times: user 45.2 ms, sys: 8.1 ms, total: 53.3 ms
# Wall time: 1.05 s

2. Visualización integrada de gráficos

Ejemplo

# %matplotlib inline: incrusta los gráficos directamente en el Notebook para mostrarlos (el más común, gráficos estáticos)
# Normalmente se coloca en la primera celda del Notebook; solo necesita ejecutarse una vez en todo el Notebook
%matplotlib inline

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 2 * np.pi, 100)
plt.plot(x, np.sin(x))
plt.title('Onda sinusoidal')
plt.show()

# %matplotlib notebook: habilita gráficos interactivos, se puede hacer zoom y desplazar (pero no se puede usar junto con inline)
# %matplotlib notebook

3. Ver y gestionar variables

Ejemplo

# %who: lista los nombres de todas las variables definidas en el espacio de nombres actual
%who
# Ejemplo de salida: data plt x

# %whos: más detallado que %who; también muestra el tipo y el valor de las variables
%whos
# Ejemplo de salida:
# Variable   Type    Data/Info
# ----------------------------
# x          ndarray 100: [0. 0.06 ... 6.28]
# data       list    n=100000

# %reset: limpia todas las variables (muestra un mensaje de confirmación; adecuado para reiniciar cálculos)
%reset

# %reset -f: fuerza la limpieza de todas las variables sin mostrar confirmación (-f significa force)
%reset -f

4. Operaciones de archivos y rutas

Ejemplo

# %pwd: muestra el directorio de trabajo actual (Print Working Directory)
%pwd
# Ejemplo de salida: '/home/user/notebooks'

# %ls: lista todos los archivos del directorio actual (los usuarios de Windows pueden usar %ls o directamente !dir)
%ls
# Ejemplo de salida: data.csv model.py notebook.ipynb

# %%writefile: escribe el contenido de toda la celda en el archivo especificado (se usa a menudo para crear rápidamente archivos de script)
%%writefile hello.py
def greet(name):
    print(f"¡Hola, {name}!")

greet("mundo")
# Después de ejecutarlo, se genera el archivo hello.py en el directorio actual, cuyo contenido es el código de la celda

# %run: ejecuta un archivo de script de Python externo e importa sus variables al espacio de nombres actual
%run hello.py
# Salida: ¡Hola, mundo!

# %load: carga el contenido de un archivo de script externo en la celda actual (no se ejecuta automáticamente, solo carga el código)
%load hello.py

5. Ejecución de comandos del sistema

Ejemplo

# Agregar ! antes del comando permite ejecutar comandos de la terminal del sistema directamente, sin cambiar a la ventana de terminal
!pip install pandas          # Instalar paquetes de Python
!pip list                    # Ver la lista de paquetes instalados
!python --version            # Ver la versión de Python

# También se puede guardar el resultado de salida del comando como una variable de Python
files = !ls -1               # Ejecutar el comando ls y asignar el resultado a la variable files
print(files)                 # files es una lista; cada nombre de archivo es un elemento

6. Ver historial y depuración

Ejemplo

# %history: ver todo el historial de comandos ejecutados en la sesión actual
%history
# Agregar -n muestra los números de línea; agregar -l 5 muestra solo las últimas 5
%history -n -l 5

# %debug: después de que el código produzca un error, ejecutar %debug en la siguiente celda permite entrar al modo de depuración interactivo
# En el modo de depuración se puede escribir el nombre de una variable para ver su valor; escribir q para salir de la depuración
# Por ejemplo, después de ejecutar un bloque de código con error:
%debug

7. Renderizado de contenido especial

Ejemplo

# %%html: renderiza el contenido de la celda como salida HTML (se pueden incrustar estilos personalizados y elementos interactivos)
%%html
<h3 style="color: steelblue;">Este es un encabezado HTML</h3>
<p style="font-size: 16px;">Se puede renderizar contenido HTML directamente en el Notebook.</p>

# %%latex: renderiza el contenido de la celda como una fórmula LaTeX (se usa a menudo para escribir fórmulas matemáticas)
%%latex
$$E = mc^2$$
$$\int_0^\infty e^{-x^2} dx = \frac{\sqrt{\pi}}{2}$$

Ver el progreso de ejecución en tiempo real

Al procesar grandes cantidades de datos o en bucles de larga duración, es muy importante ver el progreso en tiempo real. A continuación se presentan varios métodos comunes para mostrar el progreso.

1. Barra de progreso tqdm (recomendada)

tqdm es la biblioteca de barras de progreso más utilizada; admite bucles, Pandas y varios escenarios de Jupyter. Comando de instalación:

pip install tqdm

Ejemplo

from tqdm.notebook import tqdm   # En Jupyter, usar la versión notebook para una visualización más estética
import time

# Uso básico: envolver el objeto iterable en tqdm() para mostrar automáticamente la barra de progreso
for i in tqdm(range(100)):
    time.sleep(0.05)    # Simular una operación que consume tiempo
# Salida: muestra la barra de progreso, el porcentaje completado, el tiempo transcurrido y el tiempo restante estimado

# Uso combinado con enumerate
data = list(range(50))
for i, item in enumerate(tqdm(data, desc="Procesando datos")):
    # El parámetro desc establece el texto de la etiqueta a la izquierda de la barra de progreso
    time.sleep(0.05)

# Control manual del progreso (adecuado para escenarios con una cantidad total incierta)
with tqdm(total=100, desc="Progreso de descarga") as pbar:
    for chunk in range(10):
        time.sleep(0.1)
        pbar.update(10)     # Actualizar el progreso en 10 unidades cada vez
        pbar.set_postfix({"chunk": chunk})  # Mostrar información adicional a la derecha de la barra de progreso

Ejemplo

# Integración de tqdm con Pandas: muestra el progreso en las operaciones apply de DataFrame
import pandas as pd
from tqdm.notebook import tqdm

tqdm.pandas()   # Habilitar la integración con Pandas; solo se necesita ejecutar una vez

df = pd.DataFrame({'value': range(1000)})

# Usar progress_apply en lugar del apply normal para mostrar automáticamente el progreso
result = df['value'].progress_apply(lambda x: x ** 2)

2. display + clear_output para actualizar dinámicamente la salida

Cuando no se quiere instalar tqdm, se puede usar el módulo integrado de IPythonclear_outputpara lograr un efecto de actualización dinámica:

Ejemplo

from IPython.display import clear_output
import time

total = 50
for i in range(total):
    time.sleep(0.1)
   
    # clear_output(wait=True): borra la salida anterior; wait=True significa esperar a que haya contenido nuevo para borrar,
    # evitando parpadeos. Nota: esto borra toda la salida de la celda actual
    clear_output(wait=True)
   
    # Dibujar manualmente una barra de progreso de texto simple
    done = int((i + 1) / total * 30)       # Calcular el número de bloques completados (30 bloques en total)
    bar = '█' * done + '░' * (30 - done)   # █ indica completado, ░ indica no completado
    pct = (i + 1) / total * 100
    print(f"Progreso: [{bar}] {pct:.1f}% ({i+1}/{total})")

print("&#x2705; ¡Todo completado!")

3. Progreso de gráficos en tiempo real

En escenarios como el entrenamiento de modelos, se puede actualizar dinámicamente el gráfico a intervalos para observar en tiempo real la tendencia de los indicadores:

Ejemplo

%matplotlib inline
import matplotlib.pyplot as plt
from IPython.display import clear_output, display
import numpy as np
import time

losses = []     # Almacenar el valor de pérdida de cada paso para simular el proceso de entrenamiento

for step in range(50):
    # Simular el entrenamiento: generar un valor de pérdida que disminuye gradualmente
    loss = 1 / (step + 1) + np.random.uniform(0, 0.05)
    losses.append(loss)
   
    # Actualizar el gráfico cada 5 pasos para evitar actualizaciones demasiado frecuentes
    if (step + 1) % 5 == 0:
        clear_output(wait=True)
       
        fig, ax = plt.subplots(figsize=(8, 4))
        ax.plot(losses, color='steelblue', linewidth=2)
        ax.set_title(f'Progreso del entrenamiento (Step {step + 1}/50)')
        ax.set_xlabel('Step')
        ax.set_ylabel('Loss')
        ax.grid(True, alpha=0.3)
        plt.tight_layout()
        plt.show()          # Después de clear_output, llamar a show para que el gráfico se actualice en la misma posición
   
    time.sleep(0.1)

print("¡Entrenamiento completado! Loss final:", f"{losses[-1]:.4f}")

Trucos para ver documentación y código

1. Ver rápidamente la documentación de una función

Ejemplo

# Método 1: agregar ? después del nombre de la función; se abre un panel de documentación en la parte inferior del Notebook
import numpy as np
np.array?
# Se mostrará la descripción de parámetros y la funcionalidad de np.array

# Método 2: agregar ?? después del nombre de la función para abrir la documentación completa, incluido el código fuente (si está disponible)
np.array??

# Método 3: presionar Shift + Tab dentro de los paréntesis de la función
# Por ejemplo, después de escribir np.linspace( (dentro de los paréntesis), presionar Shift + Tab para mostrar sugerencias de parámetros
# Presionar Shift + Tab dos veces muestra una documentación más completa

# Método 4: usar la función help() (la salida es más completa, pero se muestra en el área de salida en lugar de en una ventana emergente)
help(np.array)

2. Usar display para mostrar múltiples resultados de salida

Por defecto, Jupyter solo muestra el valor de la última expresión de cada celda. Mediantedisplay()se pueden mostrar múltiples resultados en una celda:

Ejemplo

import pandas as pd
from IPython.display import display

df1 = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
df2 = pd.DataFrame({'X': [7, 8, 9], 'Y': [10, 11, 12]})

# Sin usar display, solo se muestra el último DataFrame
# df1 # no se mostrará
# df2 # Solo esto se mostrará

# Usar display() permite mostrar múltiples tablas a la vez, con un formato atractivo
display(df1)
display(df2)

Ejemplo

# Truco: modificar la configuración de Notebook para que el valor de cada expresión se muestre automáticamente (sin necesidad de llamar a display manualmente)
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"     # El valor predeterminado es "last_expr", después de cambiarlo a "all"
                                                    # Cada expresión en la Cell mostrará automáticamente su resultado
1 + 1      # Salida: 2
2 + 2      # Salida: 4 (por defecto esta línea no se mostrará)
"hello"    # Salida: 'hello'

3. Suprimir salidas no deseadas

Ejemplo

import matplotlib.pyplot as plt
import numpy as np

# Problema: plt.plot() muestra un gráfico y a la vez genera una descripción innecesaria del objeto, como:
# [<matplotlib.lines.Line2D object at 0x7f3b1234>]

# Solución: agregar un punto y coma (;) al final de la sentencia suprime la salida de la última expresión, pero no afecta la visualización del gráfico
plt.plot(np.sin(np.linspace(0, 2*np.pi, 100)));
# Después de agregar el punto y coma, el gráfico se muestra correctamente, pero la descripción innecesaria del objeto no aparece

Otros trucos útiles

1. Ver el valor intermedio de una variable (sin interrumpir la ejecución del código)

Ejemplo

# Truco: aprovechar la característica de las sentencias de asignación de Python de devolver el valor al mismo tiempo,
# mientras se asigna el resultado intermedio a una variable, envolver toda la línea entre paréntesis para que se muestre
import numpy as np

# Forma normal (no se ve el valor de result)
result = np.array([1, 2, 3]) * 2

# Forma con paréntesis (imprime el valor de result mientras se asigna)
(result := np.array([1, 2, 3]) * 2)    # Sintaxis del operador morsa (walrus) de Python 3.8+
# Salida: array([2, 4, 6])

# O más simple: escribir el nombre de la variable en una nueva línea después de la asignación
result = np.array([1, 2, 3]) * 2
result      # Jupyter mostrará automáticamente el valor de la última expresión

2. Referenciar el resultado de salida anterior

Ejemplo

# Jupyter incorpora variables especiales para hacer referencia rápidamente a salidas históricas:
# _ : resultado de salida de la Cell anterior
# __ : resultado de salida de la Cell anterior a la anterior
# _3 : resultado de salida de la 3.ª Cell (Out

# Por ejemplo:
1 + 1
# Out[1]: 2

_         # Referencia a la salida anterior, valor 2
# Out[2]: 2

_ * 10    # Continuar calculando con la salida anterior
# Out[3]: 20

_3 + 5    # Referencia al resultado 20 de Out
# Out[4]: 25

3. Mostrar contenido de texto enriquecido en el Notebook

Ejemplo

from IPython.display import display, HTML, Image, Markdown, Audio, Video

# Renderizar texto en formato Markdown
display(Markdown("## Este es el título\n\n**texto en negrita**, *texto en cursiva*, `código`"))

# Renderizar HTML
display(HTML("<span style='color:red; font-size:20px'>Texto grande en rojo</span>"))

# Mostrar imagen de internet (proporcionando la URL de la imagen)
display(Image(url="https://www.example.com/images/ejemplo-logo.png", width=200))

# Mostrar imagen local (proporcionando la ruta del archivo local)
# display(Image(filename="./chart.png"))

4. Añadir una etiqueta de tiempo a la celda (mostrar automáticamente el tiempo empleado en la salida)

Ejemplo

# Instalar jupyter-contrib-nbextensions para obtener más funciones de extensión
# pip install jupyter-contrib-nbextensions

# Solución simple: encapsular la lógica de medición de tiempo con un decorador o un administrador de contexto, para usarlo en cualquier bloque de código
import time
from contextlib import contextmanager

@contextmanager
def timer(label="Tiempo transcurrido"):
    start = time.time()
    try:
        yield
    finally:
        elapsed = time.time() - start
        print(f"&#x23f1; {label}: {elapsed:.3f} segundos")

# Modo de uso: envolver cualquier bloque de código con with timer(), al finalizar la ejecución se imprimirá automáticamente el tiempo transcurrido
with timer("Procesamiento de datos"):
    data = [x ** 2 for x in range(1000000)]
# Salida: &#x23f1; Procesamiento de datos: 0.087 segundos

5. Ver rápidamente todos los atajos del Notebook actual

En modo comando (borde azul), presioneH, o mediante el menúHelp → Keyboard Shortcuts, puede abrir el panel de ayuda completo de atajos de teclado para consultar todas las acciones disponibles en cualquier momento.


Tabla de referencia rápida de atajos comunes

Acción Atajo de teclado Modo
Ejecutar la Cell y saltar a la siguiente Shift + Enter General
Ejecutar la Cell y permanecer en ella Ctrl + Enter General
Ejecutar la Cell y crear una nueva debajo Alt + Enter General
Entrar en modo de edición Enter Modo de comando
Salir del modo de edición Esc Modo de edición
Insertar Cell arriba A Modo de comando
Insertar Cell abajo B Modo de comando
Eliminar Cell D, D Modo de comando
Deshacer eliminación de Cell Z Modo de comando
Cambiar a Cell de código Y Modo de comando
Cambiar a Cell de Markdown M Modo de comando
Fusionar las Celdas seleccionadas Shift + M Modo de comando
Interrumpir el kernel (detener la ejecución) I, I Modo de comando
Reiniciar el kernel 0, 0 Modo de comando
Mostrar ayuda de atajos de teclado H Modo de comando
Autocompletar código Tab Modo de edición
Ver parámetros/documentación de la función Shift + Tab Modo de edición
Comentar/descomentar Ctrl + / Modo de edición
Dividir Cell en la posición del cursor Ctrl + Shift + - Modo de edición
Guardar Notebook S / Ctrl + S Modo de comando / Modo de edición
Otras extensiones