Hola. En este video vamos a estudiar algunos métodos que podemos usar para modificar el contenido de una serie. Como veremos, las funciones para consultar nos serán de mucha utilidad, así que asegúrese de tener muy clara la diferencia entre las funciones "loc" e "iloc". En este video, también veremos que las modificaciones no siempre se comportan de la forma en la que uno esperaría y que hay unas sutilezas de las funciones con las cuales tenemos que tener muchísimo cuidado. Por eso, les recomendamos que sean muy ordenados en el momento de realizar las modificaciones y tengan cuidado con cosas como el orden de las etiquetas y el orden de los valores. Para empezar, veamos la serie con la cual vamos a estar trabajando en este video. Los valores de esta serie se consiguieron con una función de "numpy" que genera números aleatorios con una distribución normal. En este caso, el promedio de los valores es 100, la desviación estándar es 20 y tenemos un total de 1.000 valores diferentes. En la figura de la izquierda, podemos ver los valores de la serie ordenados de acuerdo a su etiqueta. En esta visualización, solo vemos ruido alrededor del valor promedio de 100. En la figura de la derecha tenemos un histograma construido a partir de los mismos valores que nos muestra que, efectivamente, se distribuyen de una forma más o menos normal. Veamos ahora lo que ocurre cuando organizamos los valores de la serie. A la izquierda, vemos la serie resultado después de empujar la función "sort_values". Esta función reorganiza la serie de acuerdo a los valores en ella contenida de forma ascendente. Como vemos, el orden de los valores y el orden de las etiquetas no tiene ninguna relación entre ellos. A la derecha, vemos el resultado después de invocar la función "sort_ index", que reorganiza la serie de acuerdo al valor de las etiquetas. Ahora si, vamos a empezar a estudiar la modificación de las series, pero para que los resultados entre métodos sean comparables, primero vamos a crear una copia de la serie original. Esto lo logramos invocando la función "copy". Ahora vamos a modificar la serie "copia" utilizando el selector 500 y asignándole el valor 180. Como vemos en la figura, esto modifica el valor asociado a la etiqueta 500, que ahora sobresale por encima de los demás. Ahora repetimos la misma operación, pero en lugar de usar un solo número como selector, utilizamos un rango. Entre cero y 100, asignamos el valor 20, que se replica para cada una de las posiciones que están en ese rango. Entre 900 y 1.000, asignamos una lista con 100 posiciones, donde en todas las posiciones tenemos el valor 40. El resultado lo podemos ver en la figura. A la izquierda, tenemos las primeras 100 posiciones que tienen el valor 20. A la derecha, vemos las últimas 100 posiciones que tienen el valor 40. Ahora veamos lo que pasa si, antes de hacer las modificaciones, ordenamos la serie de acuerdo a sus valores. En primer lugar, no vemos por ningún lado una etiqueta del valor 180, ya veremos por qué. Luego modificamos la serie copia entre las posiciones cero y 100 y le asignamos el valor 20. En la gráfica, vemos que esos valores terminan repartidos por todos lados, debido a que esta gráfica que estamos viendo está organizada de acuerdo a los valores de las etiquetas. Algo parecido ocurre con los valores a los cuales le asignamos el 40. También quedan repartidos por todas las etiquetas. La gráfica también nos muestra que la etiqueta 500 terminó con el valor 20 y no con el 180 que esperábamos. A pesar de que la gráfica anterior se ve un poco extraña, si visualizamos los datos en un histograma, podemos ver que hay 100 valores con el valor 20, 100 valores con el valor 40 y el resto de valores están repartidos de forma más o menos normal. Aunque todo esto tiene sentido. Queremos hacer énfasis en la inconsistencia de este mecanismo. Si tenemos un solo valor, estamos hablando de una etiqueta. Si utilizamos un rango, estamos hablando de las posiciones. Esto nos puede crear confusiones y nos puede llevar a series modificadas de forma incorrecta. Veamos ahora una pregunta para revisar que todo esté claro. Ahora veamos lo que ocurre si en lugar de hacer la asignación directamente utilizamos el resultado de la función "loc". En este caso el resultado es consistente. Si utilizamos un solo número, estamos hablando de una etiqueta. Si utilizamos un rango de números, estamos hablando de un rango de etiquetas. Como la gráfica que estamos viendo está organizada con las etiquetas, el resultado se ve exactamente como nosotros esperaríamos. Finalmente, veamos lo que pasa si utilizamos la asignación, pero sobre el resultado de la función "iloc" que consulta los valores de una serie con base en la posición. Si utilizamos un número, vamos a estar hablando de una posición. Si utilizamos un rango, vamos a estar hablando de un rango de posiciones. Nuevamente, el resultado es exactamente el que esperaríamos. Sin embargo, en este caso, hay un detalle importante que hace que las cosas funcionen. La gráfica que estamos viendo está ordenada de acuerdo a las etiquetas. Es decir, que las etiquetas coinciden con las posiciones. Si esto no fuera así, el resultado sería un caos total, como el que vimos hace un rato. Veamos ahora una pregunta antes de continuar. Para terminar, queremos reiterar que en el momento de hacer una modificación sobre una serie, tenemos que tener claridad sobre cómo está ordenada la serie antes de empezar a modificarla. Debemos escoger el método para seleccionar los elementos que vamos a modificar de acuerdo al ordenamiento que tenga la serie. Recordemos entonces, si usamos "loc", seleccionamos los elementos utilizando la etiqueta. Si utilizamos "iloc", seleccionamos los elementos de acuerdo a su posición, y si no usamos ni "loc" ni "iloc", seleccionamos por etiquetas si es un solo valor o por posición si es un rango. Y finalmente, le recomendamos siempre hacer copias de los datos antes de empezar a modificarlos.