diff --git a/episodes/01-run-quit.md b/episodes/01-run-quit.md index 94fa9e5..6df10a8 100644 --- a/episodes/01-run-quit.md +++ b/episodes/01-run-quit.md @@ -25,7 +25,7 @@ exercises: 0 Para ejecutar Python, vamos a utilizar [Jupyter Notebooks][jupyter] a través de [JupyterLab][jupyterlab] para el resto de este taller. Los cuadernos Jupyter son comunes -en la ciencia de datos y visualización y sirven como una experiencia conveniente para +en la ciencia de datos y visualización, y sirven como una experiencia conveniente para ejecutar código Python de forma interactiva donde podemos ver y compartir fácilmente los resultados de nuestro código Python. @@ -41,11 +41,11 @@ código Python inmediatamente dentro del cuaderno. JupyterLab tiene otras funciones muy útiles: - Puedes escribir, editar y copiar y pegar fácilmente bloques de código. -- Pestaña completa te permite acceder fácilmente a los nombres de las cosas que estás +- En pestaña completa te permite acceder fácilmente a los nombres de las cosas que estás utilizando y aprender más sobre ellas. - Te permite anotar tu código con enlaces, texto de distinto tamaño, viñetas, etc. para hacerlo más accesible a ti y a tus colaboradores. -- Le permite mostrar figuras junto al código que las produce para contar una historia +- Te permite mostrar figuras junto al código que las produce para contar una historia completa del análisis. Cada cuaderno contiene una o más celdas que contienen código, texto o imágenes. @@ -76,7 +76,7 @@ descargar e instalar Anaconda y JupyterLab ::::::::::::::::::::::::::::::::::::::::: callout -## JupyterLab? ¿Y para los cuadernos Jupyter? +## ¿JupyterLab? ¿Y para los cuadernos Jupyter? JupyterLab es la [siguiente etapa en la evolución del Jupyter Notebook](https://jupyterlab.readthedocs.io/en/stable/getting_started/overview.html#overview). @@ -235,7 +235,7 @@ archivos de texto, etc.) y otras actividades (terminales, consolas de código, e paneles de pestañas que se pueden redimensionar o subdividir. A continuación se muestra una captura de pantalla del Área de trabajo principal por defecto. -Si no ves la pestaña Lanzador, haz clic en el signo más azul bajo los menús "Archivo" y +Si no ves la pestaña Launcher, haz clic en el signo más azul bajo los menús "Archivo" y "Editar" y aparecerá.
@@ -250,11 +250,11 @@ defecto).
## Creación de un script Python
- Para empezar a escribir un nuevo programa Python haz clic en el icono Archivo de Texto
- bajo la cabecera *Otros* en la pestaña Lanzador del Área de Trabajo Principal.
- - También puede crear un nuevo archivo de texto sin formato seleccionando *Nuevo ->
- Archivo de texto* en el menú *Archivo* de la barra de menús.
+ bajo la cabecera *Others* en la pestaña Lanzador del Área de Trabajo Principal.
+ - También puede crear un nuevo archivo de texto sin formato seleccionando *New ->
+ Textfile* en el menú *File* de la barra de menús.
- Para convertir este archivo de texto plano en un programa Python, selecciona la acción
- *Guardar Archivo Como* del menú *Archivo* en la Barra de Menú y dale a tu nuevo
+ *Save file as* del menú *File* en la Barra de Menú y dale a tu nuevo
archivo de texto un nombre que termine con la extensión `.py`.
- La extensión `.py` permite a todo el mundo (incluido el sistema operativo) saber que
este archivo de texto es un programa Python.
@@ -262,9 +262,9 @@ defecto).
## Crear un cuaderno Jupyter
-Para abrir un nuevo cuaderno haz clic en el icono Python 3 bajo la cabecera *Cuaderno*
+Para abrir un nuevo cuaderno haz clic en el icono Python 3 bajo la cabecera *Notebook*
en la pestaña Lanzador del área de trabajo principal. También puedes crear un nuevo
-cuaderno seleccionando *Nuevo -> Cuaderno* en el menú *Archivo* de la Barra de Menús.
+cuaderno seleccionando *New -> Notebook* en el menú *File* de la Barra de Menús.
Notas adicionales sobre los cuadernos Jupyter.
@@ -341,7 +341,7 @@ humanos.
- Si pulsa Esc y Return alternativamente, el borde exterior de su
celda de código cambiará de gris a azul.
-- Estos son los modos **Comando** (gris) y **Edición** (azul) de tu bloc de notas.
+- Estos son los modos **Command/Comando** (gris) y **Edit/Edición** (azul) de tu bloc de notas.
- El modo Comando te permite editar las características del cuaderno, y el modo Edición
cambia el contenido de las celdas.
- En modo Comando (esc/gris),
@@ -387,7 +387,7 @@ tu celda es azul). Escriba z.
- Como queremos poder escribir muchas líneas de código en una sola celda, al pulsar la
tecla Retorno cuando se está en modo Edición (azul) se mueve el cursor a la
siguiente línea de la celda, igual que en un editor de texto.
-- Necesitamos alguna otra forma de decirle al Cuaderno que queremos ejecutar lo que hay
+- Necesitamos alguna otra forma de decirle al Notebook que queremos ejecutar lo que hay
en la celda.
- Al pulsar conjuntamente Mayús\+Retorno se ejecutará el contenido
de la celda.
@@ -592,7 +592,7 @@ comandos LaTeX para los símbolos "suma sobre" y "aproxima".
## Cerrar JupyterLab
-- En la barra de menús, seleccione el menú "Archivo" y, a continuación, elija "Apagar"
+- En la barra de menús, seleccione el menú "File" y, a continuación, elija "Shut down"
en la parte inferior del menú desplegable. Se le pedirá que confirme que desea apagar
el servidor JupyterLab (¡no olvide guardar su trabajo!). Haga clic en "Shut Down" para
apagar el servidor JupyterLab.
@@ -626,7 +626,7 @@ https://jupyterlab.readthedocs.io/en/stable/user/notebook.html
- Los scripts de Python son archivos de texto sin formato.
- Utiliza el Jupyter Notebook para editar y ejecutar Python.
-- El Cuaderno dispone de los modos Comando y Edición.
+- El Notebook dispone de los modos Command y Edition.
- Utilizar el teclado y el ratón para seleccionar y editar celdas.
- El Cuaderno convertirá Markdown en documentación con una bonita impresión.
- Markdown hace la mayor parte de lo que hace HTML.
diff --git a/episodes/03-types-conversion.md b/episodes/03-types-conversion.md
index 66df17e..ebf21eb 100644
--- a/episodes/03-types-conversion.md
+++ b/episodes/03-types-conversion.md
@@ -234,7 +234,7 @@ print(type(3.4))
## Solución
-Es un flotador: los enteros se convierten automáticamente en flotadores cuando es
+Es un float: los enteros se convierten automáticamente en floats cuando es
necesario.
```python
diff --git a/episodes/04-built-in.md b/episodes/04-built-in.md
index ff0361b..672a295 100644
--- a/episodes/04-built-in.md
+++ b/episodes/04-built-in.md
@@ -137,13 +137,13 @@ round(3.712, 1)
doble subrayado.
```python
-my_string = 'Hello world!' # creation of a string object
+my_string = 'Hello world!' # creación de un string
-print(len(my_string)) # the len function takes a string as an argument and returns the length of the string
+print(len(my_string)) # la función len toma un string y devuelve la longitud del string
-print(my_string.swapcase()) # calling the swapcase method on the my_string object
+print(my_string.swapcase()) # llamada al método swapcase de mi objeto my_string
-print(my_string.__len__()) # calling the internal __len__ method on the my_string object, used by len(my_string)
+print(my_string.__len__()) # llamando al método interno __len__ en el objeto my_string, usado por len(my_string)
```
@@ -156,10 +156,10 @@ hELLO WORLD!
- Incluso puede verlos encadenados. Funcionan de izquierda a derecha.
```python
-print(my_string.isupper()) # Not all the letters are uppercase
-print(my_string.upper()) # This capitalizes all the letters
+print(my_string.isupper()) # no todas las letras son mayúsculas
+print(my_string.upper()) # esto lo convierte todo a mayúsculas
-print(my_string.upper().isupper()) # Now all the letters are uppercase
+print(my_string.upper().isupper()) # ahora son todo mayúsculas
```
```output
@@ -200,7 +200,7 @@ round(number, ndigits=None)
- Ni siquiera intentará ejecutar el programa si no puede ser analizado.
```python
-# Forgot to close the quote marks around the string.
+# Olvidamos cerrar la comilla
name = 'Feng
```
diff --git a/episodes/06-libraries.md b/episodes/06-libraries.md
index 45473c8..149e608 100644
--- a/episodes/06-libraries.md
+++ b/episodes/06-libraries.md
@@ -1,5 +1,5 @@
---
-title: Bibliotecas
+title: Librerías
teaching: 10
exercises: 10
---
@@ -7,11 +7,11 @@ exercises: 10
::::::::::::::::::::::::::::::::::::::: objectives
-- Explicar qué son las bibliotecas de software y por qué los programadores las crean y
+- Explicar qué son las librerías de software y por qué los programadores las crean y
utilizan.
-- Escribir programas que importen y utilicen módulos de la biblioteca estándar de
+- Escribir programas que importen y utilicen módulos de la librería estándar de
Python.
-- Buscar y leer documentación de la biblioteca estándar de forma interactiva (en el
+- Buscar y leer documentación de la librería estándar de forma interactiva (en el
intérprete) y en línea.
::::::::::::::::::::::::::::::::::::::::::::::::::
@@ -23,37 +23,37 @@ exercises: 10
::::::::::::::::::::::::::::::::::::::::::::::::::
-## La mayor parte de la potencia de un lenguaje de programación está en sus bibliotecas.
+## La mayor parte de la potencia de un lenguaje de programación está en sus librerías.
-- Una *biblioteca* es una colección de ficheros (llamados *módulos*) que contienen
+- Una *librería* es una colección de ficheros (llamados *módulos*) que contienen
funciones para ser usadas por otros programas.
- También puede contener valores de datos (por ejemplo, constantes numéricas) y otras
cosas.
- - Se supone que los contenidos de la biblioteca están relacionados, pero no hay forma
+ - Se supone que los contenidos de la librería están relacionados, pero no hay forma
de hacer cumplir esto.
-- La [biblioteca estándar][stdlib] de Python es un extenso conjunto de módulos que
+- La [librería estándar][stdlib] de Python es un extenso conjunto de módulos que
vienen con el propio Python.
-- Muchas bibliotecas adicionales están disponibles en [PyPI][pypi] (the Python Package
+- Muchas librerías adicionales están disponibles en [PyPI][pypi] (the Python Package
Index).
-- Veremos más adelante cómo escribir nuevas bibliotecas.
+- Veremos más adelante cómo escribir nuevas librerías.
::::::::::::::::::::::::::::::::::::::::: callout
-## Bibliotecas y módulos
+## librerías y módulos
-Una biblioteca es una colección de módulos, pero a menudo los términos se usan
-indistintamente, especialmente porque muchas bibliotecas sólo consisten en un único
+Una librería es una colección de módulos, pero a menudo los términos se usan
+indistintamente, especialmente porque muchas librerías sólo consisten en un único
módulo, así que no te preocupes si los mezclas.
::::::::::::::::::::::::::::::::::::::::::::::::::
-## Un programa debe importar un módulo de biblioteca antes de usarlo.
+## Un programa debe importar un módulo de librería antes de usarlo.
-- Utilice `import` para cargar un módulo de biblioteca en la memoria de un programa.
+- Utilice `import` para cargar un módulo de librería en la memoria de un programa.
- Luego refiérase a cosas del módulo como `module_name.thing_name`.
- Python usa `.` para significar "parte de".
-- Usando `math`, uno de los módulos de la biblioteca estándar:
+- Usando `math`, uno de los módulos de la librería estándar:
```python
import math
@@ -71,7 +71,7 @@ cos(pi) is -1.0
- `math.cos(pi)` no funciona: la referencia a `pi` no "hereda" de algún modo la
referencia de la función a `math`.
-## Utilice `help` para conocer el contenido de un módulo de biblioteca.
+## Utilice `help` para conocer el contenido de un módulo de librería.
- Funciona igual que la ayuda para una función.
@@ -104,11 +104,11 @@ FUNCTIONS
⋮ ⋮ ⋮
```
-## Importar elementos específicos de un módulo de biblioteca para acortar programas.
+## Importar elementos específicos de un módulo de librería para acortar programas.
- Utilice `from ... import ...` para cargar sólo elementos específicos de un módulo de
- biblioteca.
-- Luego refiérase a ellos directamente sin el nombre de la biblioteca como prefijo.
+ librería.
+- Luego refiérase a ellos directamente sin el nombre de la librería como prefijo.
```python
from math import cos, pi
@@ -120,10 +120,10 @@ print('cos(pi) is', cos(pi))
cos(pi) is -1.0
```
-## Crear un alias para un módulo de biblioteca al importarlo para acortar programas.
+## Crear un alias para un módulo de librería al importarlo para acortar programas.
-- Utilice `import ... as ...` para dar un *alias* corto a una biblioteca al importarla.
-- A continuación, haga referencia a los elementos de la biblioteca utilizando ese nombre
+- Utilice `import ... as ...` para dar un *alias* corto a una librería al importarla.
+- A continuación, haga referencia a los elementos de la librería utilizando ese nombre
abreviado.
```python
@@ -136,7 +136,7 @@ print('cos(pi) is', m.cos(m.pi))
cos(pi) is -1.0
```
-- Comúnmente utilizado para bibliotecas de uso frecuente o con nombres largos.
+- Comúnmente utilizado para librerías de uso frecuente o con nombres largos.
- Por ejemplo, la librería de ploteo `matplotlib` a menudo tiene el alias `mpl`.
- Pero puede hacer que los programas sean más difíciles de entender, ya que los lectores
deben aprender los alias de su programa.
@@ -147,7 +147,7 @@ cos(pi) is -1.0
1. ¿Qué función del módulo `math` puedes usar para calcular una raíz cuadrada *sin* usar
`sqrt`?
-2. Dado que la biblioteca contiene esta función, ¿por qué existe `sqrt`?
+2. Dado que la librería contiene esta función, ¿por qué existe `sqrt`?
::::::::::::::: solution
@@ -161,7 +161,7 @@ cos(pi) is -1.0
programación, por lo que tiene sentido proporcionar una función especial para este
caso común específico.
-Además, el diseño de la biblioteca `math` de Python tiene su origen en el estándar C,
+Además, el diseño de la librería `math` de Python tiene su origen en el estándar C,
que incluye tanto `sqrt(x)` como `pow(x,y)`, por lo que un poco de la historia de la
programación se muestra en los nombres de las funciones de Python.
@@ -181,7 +181,7 @@ Desea seleccionar un carácter aleatorio de una cadena:
bases = 'ACTTGCTTGAC'
```
-1. ¿Qué módulo de [biblioteca estándar][stdlib] podría ayudarle?
+1. ¿Qué módulo de [librería estándar][stdlib] podría ayudarle?
2. ¿Qué función seleccionarías de ese módulo? ¿Existen alternativas?
3. Intenta escribir un programa que utilice la función.
@@ -344,9 +344,9 @@ cuando hay convenciones claras de abreviación.
::::::::::::::::::::::::::::::::::::::: challenge
-## ¡Hay Muchas Formas De Importar Bibliotecas!
+## ¡Hay Muchas Formas De Importar Librerías!
-Empareja las siguientes sentencias de impresión con las llamadas a biblioteca
+Empareja las siguientes sentencias de impresión con las llamadas a librería
apropiadas.
Comandos de impresión:
@@ -355,7 +355,7 @@ Comandos de impresión:
2. `print("sin(pi/2) =", m.sin(m.pi/2))`
3. `print("sin(pi/2) =", math.sin(math.pi/2))`
-Llamadas a bibliotecas:
+Llamadas a librerías:
1. `from math import sin, pi`
2. `import math`
@@ -366,24 +366,24 @@ Llamadas a bibliotecas:
## Solución
-1. Llamadas a las bibliotecas 1 y 4. Para referirse directamente a `sin` y `pi` sin el
- nombre de la biblioteca como prefijo, es necesario utilizar la sentencia `from ...
- import ...`. Mientras que la llamada a biblioteca 1 importa específicamente las dos
- funciones `sin` y `pi`, la llamada a biblioteca 4 importa todas las funciones del
+1. Llamadas a las librerías 1 y 4. Para referirse directamente a `sin` y `pi` sin el
+ nombre de la librería como prefijo, es necesario utilizar la sentencia `from ...
+ import ...`. Mientras que la llamada a librería 1 importa específicamente las dos
+ funciones `sin` y `pi`, la llamada a librería 4 importa todas las funciones del
módulo `math`.
-2. Llamada a la biblioteca 3. Aquí se hace referencia a `sin` y `pi` con un nombre de
- biblioteca abreviado `m` en lugar de `math`. La llamada a biblioteca 3 hace
+2. Llamada a la librería 3. Aquí se hace referencia a `sin` y `pi` con un nombre de
+ librería abreviado `m` en lugar de `math`. La llamada a librería 3 hace
exactamente eso utilizando la sintaxis `import ... as ...` - crea un alias para
`math` con el nombre abreviado `m`.
-3. Llamada a la biblioteca 2. Aquí se hace referencia a `sin` y `pi` con el nombre de
- biblioteca normal `math`, por lo que basta con la llamada normal `import ...`.
+3. Llamada a la librería 2. Aquí se hace referencia a `sin` y `pi` con el nombre de
+ librería normal `math`, por lo que basta con la llamada normal `import ...`.
-**Nota:** aunque la llamada a biblioteca 4 funciona, importar todos los nombres de un
+**Nota:** aunque la llamada a librería 4 funciona, importar todos los nombres de un
módulo usando una importación comodín [no es recomendable][pep8-imports] ya que hace que
no quede claro qué nombres del módulo se usan en el código. En general, es mejor hacer
las importaciones tan específicas como sea posible y sólo importar lo que el código
-utiliza. En la llamada a biblioteca 1, la sentencia `import` nos dice explícitamente que
-la función `sin` es importada del módulo `math`, pero la llamada a biblioteca 4 no
+utiliza. En la llamada a librería 1, la sentencia `import` nos dice explícitamente que
+la función `sin` es importada del módulo `math`, pero la llamada a librería 4 no
transmite esta información.
@@ -420,7 +420,7 @@ Lo más probable es que encuentres esta versión más fácil de leer ya que es m
La principal razón para no utilizar esta forma de importación es evitar conflictos de
nombres. Por ejemplo, no importaría `degrees` de esta forma si también quisiera usar el
nombre `degrees` para una variable o función propia. O si también importaras una función
-llamada `degrees` de otra biblioteca.
+llamada `degrees` de otra librería.
@@ -472,11 +472,11 @@ ValueError: math domain error
:::::::::::::::::::::::::::::::::::::::: keypoints
-- La mayor parte de la potencia de un lenguaje de programación está en sus bibliotecas.
-- Un programa debe importar un módulo de biblioteca para poder utilizarlo.
-- Utilice `help` para conocer el contenido de un módulo de biblioteca.
-- Importa elementos específicos de una biblioteca para acortar programas.
-- Crea un alias para una biblioteca al importarla para acortar programas.
+- La mayor parte de la potencia de un lenguaje de programación está en sus librerías.
+- Un programa debe importar un módulo de librería para poder utilizarlo.
+- Utilice `help` para conocer el contenido de un módulo de librería.
+- Importa elementos específicos de una librería para acortar programas.
+- Crea un alias para una librería al importarla para acortar programas.
::::::::::::::::::::::::::::::::::::::::::::::::::
diff --git a/episodes/08-data-frames.md b/episodes/08-data-frames.md
index dd96dfe..8fc14bc 100644
--- a/episodes/08-data-frames.md
+++ b/episodes/08-data-frames.md
@@ -594,48 +594,48 @@ Sugiere distintas formas de realizar las siguientes operaciones en un DataFrame:
1\. Accede a una sola columna:
```python
-# by name
+# por nombre
data["col_name"] # as a Series
data[["col_name"]] # as a DataFrame
-# by name using .loc
+# por nombre utilizando .loc
data.T.loc["col_name"] # as a Series
data.T.loc[["col_name"]].T # as a DataFrame
-# Dot notation (Series)
+# notación punto (Series)
data.col_name
-# by index (iloc)
+# por índice (iloc)
data.iloc[:, col_index] # as a Series
data.iloc[:, [col_index]] # as a DataFrame
-# using a mask
+# utilizando una máscara
data.T[data.T.index == "col_name"].T
```
2\. Accede a una única fila:
```python
-# by name using .loc
+# por nombre utilizando .loc
data.loc["row_name"] # as a Series
data.loc[["row_name"]] # as a DataFrame
-# by name
+# por nombre
data.T["row_name"] # as a Series
data.T[["row_name"]].T # as a DataFrame
-# by index
+# por índice
data.iloc[row_index] # as a Series
data.iloc[[row_index]] # as a DataFrame
-# using mask
+# utilizando máscara
data[data.index == "row_name"]
```
3\. Accede a un elemento individual del DataFrame:
```python
-# by column/row names
+# por nombre de columna/fila
data["column_name"]["row_name"] # as a Series
data[["col_name"]].loc["row_name"] # as a Series
@@ -650,78 +650,78 @@ data.loc[["row_name"], "col_name"] # as a Series. Preserves index. Column name
data.loc["row_name", ["col_name"]] # as a Series. Index is moved to `.name.` Sets index to column name.
data.loc[["row_name"], ["col_name"]] # as a DataFrame (preserves original index and column name)
-# by column/row names: Dot notation
+# nombres de columna/fila: notacíon de punto
data.col_name.row_name
-# by column/row indices
+# índices de columna/fila
data.iloc[row_index, col_index] # as a value
data.iloc[[row_index], col_index] # as a Series. Preserves index. Column name is moved to `.name`
data.iloc[row_index, [col_index]] # as a Series. Index is moved to `.name.` Sets index to column name.
data.iloc[[row_index], [col_index]] # as a DataFrame (preserves original index and column name)
-# column name + row index
+# nombre columna + índice fila
data["col_name"][row_index]
data.col_name[row_index]
data["col_name"].iloc[row_index]
-# column index + row name
+# índice columna + nombre fila
data.iloc[:, [col_index]].loc["row_name"] # as a Series
data.iloc[:, [col_index]].loc[["row_name"]] # as a DataFrame
-# using masks
+# utilizando máscaras
data[data.index == "row_name"].T[data.T.index == "col_name"].T
```
4\. Accede a varias columnas:
```python
-# by name
+# por nombre
data[["col1", "col2", "col3"]]
data.loc[:, ["col1", "col2", "col3"]]
-# by index
+# por índice
data.iloc[:, [col1_index, col2_index, col3_index]]
```
5\. Accede a varias filas
```python
-# by name
+# por nombre
data.loc[["row1", "row2", "row3"]]
-# by index
+# por índice
data.iloc[[row1_index, row2_index, row3_index]]
```
6\. Accede a un subconjunto de filas y columnas específicas
```python
-# by names
+# por nombres
data.loc[["row1", "row2", "row3"], ["col1", "col2", "col3"]]
-# by indices
+# por indices
data.iloc[[row1_index, row2_index, row3_index], [col1_index, col2_index, col3_index]]
-# column names + row indices
+# nombre columna + indice fila
data[["col1", "col2", "col3"]].iloc[[row1_index, row2_index, row3_index]]
-# column indices + row names
+# índice columna + nombre fila
data.iloc[:, [col1_index, col2_index, col3_index]].loc[["row1", "row2", "row3"]]
```
7\. Accede a un subconjunto de rangos de filas y columnas
```python
-# by name
+# por nombre
data.loc["row1":"row2", "col1":"col2"]
-# by index
+# por índice
data.iloc[row1_index:row2_index, col1_index:col2_index]
-# column names + row indices
+# nombre columna + indice fila
data.loc[:, "col1_name":"col2_name"].iloc[row1_index:row2_index]
-# column indices + row names
+# índice columna + nombre fila
data.iloc[:, col1_index:col2_index].loc["row1":"row2"]
```
diff --git a/episodes/09-plotting.md b/episodes/09-plotting.md
index 332f414..09b3fc7 100644
--- a/episodes/09-plotting.md
+++ b/episodes/09-plotting.md
@@ -83,15 +83,15 @@ import pandas as pd
data = pd.read_csv('data/gapminder_gdp_oceania.csv', index_col='country')
-# Extract year from last 4 characters of each column name
-# The current column names are structured as 'gdpPercap_(year)',
-# so we want to keep the (year) part only for clarity when plotting GDP vs. years
-# To do this we use replace(), which removes from the string the characters stated in the argument
-# This method works on strings, so we use replace() from Pandas Series.str vectorized string functions
+# Extraer el año de los últimos 4 caracteres de cada nombre de columna
+# Los nombres actuales de las columnas tienen la estructura 'gdpPercap_(año)',
+# por lo que queremos conservar solo la parte del (año) para mayor claridad al graficar PIB vs. años
+# Para ello usamos replace(), que elimina de la cadena los caracteres indicados en el argumento
+# Este método funciona con cadenas, así que usamos replace() desde las funciones vectorizadas de cadenas de Pandas: Series.str
years = data.columns.str.replace('gdpPercap_', '')
-# Convert year values to integers, saving results back to dataframe
+# Convierte los valores de los años a integers, guardando los resultados de vuelta
data.columns = years.astype(int)
diff --git a/episodes/14-looping-data-sets.md b/episodes/14-looping-data-sets.md
index 06ce1ff..351e111 100644
--- a/episodes/14-looping-data-sets.md
+++ b/episodes/14-looping-data-sets.md
@@ -61,7 +61,7 @@ dtype: float64
- Los patrones más comunes son:
- `*` significa "coincide con cero o más caracteres"
- `?` significa "coincide exactamente con un carácter"
-- La biblioteca estándar de Python contiene el módulo
+- La librería estándar de Python contiene el módulo
[`glob`](https://docs.python.org/3/library/glob.html) para proporcionar la
funcionalidad de coincidencia de patrones
- El módulo [`glob`](https://docs.python.org/3/library/glob.html) contiene una función
@@ -208,22 +208,22 @@ import matplotlib.pyplot as plt
fig, ax = plt.subplots(1,1)
for filename in glob.glob('data/gapminder_gdp*.csv'):
dataframe = pd.read_csv(filename)
- # extract