HOWTO · Pandas
Calcule la desviación estándar móvil en pandas
Este tutorial detalla cómo calcular la desviación estándar móvil en Pandas.
En esta página
Para una Series o un DataFrame de Pandas, llama a rolling(window=...) para definir la ventana móvil y, después, a std() para calcular la desviación estándar en cada ventana. Por ejemplo, values.rolling(window=3).std() devuelve la desviación estándar móvil usando tres observaciones por resultado. Los primeros resultados no están disponibles hasta que hay una ventana completa.
Calcula la desviación estándar móvil con rolling().std()
Un cálculo móvil recorre los valores en orden. En cada posición, Pandas toma las observaciones de la ventana seleccionada y calcula su desviación estándar. El siguiente ejemplo usa una Series breve para que sea fácil adaptar tanto los datos de entrada como el cálculo. Establece ddof=0 explícitamente, por lo que cada ventana completa usa la desviación estándar poblacional y los valores se imprimen redondeados a dos decimales.
Ejecuta este ejemplo:
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.
import pandas as pd
values = pd.Series([2, 4, 6, 8, 10])
rolling_std = values.rolling(window=3).std(ddof=0)
print(rolling_std.round(2).to_string())
0 NaN
1 NaN
2 1.63
3 1.63
4 1.63
El argumento window indica aquí el número de observaciones de cada ventana. Pandas también admite ventanas basadas en tiempo cuando la Series o el DataFrame tiene un índice de fechas y horas; estas ventanas se especifican con una duración, como "7D", y el número de observaciones puede variar según las fechas. Consulta la API de ventanas móviles de Pandas para conocer los formatos de ventana y las opciones disponibles.
Elige una ventana e interpreta el resultado
Elige una ventana que corresponda al período que quieras resumir. Una ventana corta responde con rapidez a los cambios locales, mientras que una más larga suaviza más las variaciones. Cada valor de salida describe la dispersión de las observaciones de su propia ventana, por lo que puede ayudar a comparar la variación a lo largo del tiempo; no predice valores futuros.
De forma predeterminada, una ventana debe contener todas sus observaciones antes de que Pandas devuelva un valor. Por eso, con window=3, faltan los dos primeros valores: ninguno tiene todavía tres observaciones disponibles. Si es adecuado obtener un resultado con menos observaciones, establece min_periods, teniendo en cuenta que esos primeros valores resumen una muestra más pequeña. La desviación estándar usa por defecto la convención muestral (ddof=1); pasa ddof=0 para usar la convención poblacional cuando corresponda a tu análisis. Los valores ausentes en los datos de entrada también pueden afectar a qué ventanas producen resultados.
Comprende el código heredado con rolling_std()
El código antiguo puede llamar a rolling_std(). Si te encuentras con ese caso, adapta la operación a la interfaz de ventanas móviles: llama a series.rolling(window=...) y después a .std(). Así, la elección de la ventana queda explícita y se sigue el mismo patrón que en otros cálculos móviles. No hace falta conocer la versión histórica en la que apareció un método para actualizar el cálculo; si mantienes entornos antiguos, consulta la documentación de la versión de Pandas que use el proyecto.