Series o DataFrames¶Cualquier procesado, manipulación o análisis de conjuntos de datos implica el aplicar transformaciones, funciones o calcular indicadores elemento a elemento, fila a fila o columna a columna.
# Preliminares
import pandas as pd
import numpy as np
Para ilustrar, generamos un DataFrame usando un generador de números aleatorios.
# Usamos el generador por defecto del módulo random de numpy
rng = np.random.default_rng()
#
df = pd.DataFrame(
rng.standard_normal(size=10).reshape(5, 2),
columns=list('xy')
)
df
| x | y | |
|---|---|---|
| 0 | -0.131601 | -0.186435 |
| 1 | -1.908522 | 0.039505 |
| 2 | 0.324792 | 1.964660 |
| 3 | 0.093982 | 0.760966 |
| 4 | 1.246065 | -0.346505 |
ufuncs de numpy¶Puesto que un DataFrame también es un array de numpy, podemos aplicarle cualquier función universal de numpy. Las funciones universales de numpy(ufuncs) se pueden consultar en la referencia Available ufuncs
# Calculamos la exponencial de x e y, elemento a elemento
np.exp(df)
| x | y | |
|---|---|---|
| 0 | 0.876691 | 0.829913 |
| 1 | 0.148299 | 1.040296 |
| 2 | 1.383743 | 7.132488 |
| 3 | 1.098540 | 2.140343 |
| 4 | 3.476635 | 0.707155 |
# Elevamos x a la potencia y, elemento a elemento:
np.power(df['x'], df['y'])
0 NaN 1 NaN 2 0.109767 3 0.165395 4 0.926605 dtype: float64
pandas directamente a todo un DataFrame¶# Para obtener la suma, columna por columna
df.sum()
x -0.375284 y 2.232192 dtype: float64
# Para obtener la media, columna por columna
df.mean()
x -0.075057 y 0.446438 dtype: float64
# Para obtener la desviación típica, columna por columna
df.std()
x 1.150935 y 0.948526 dtype: float64
También podríamos calcular estos indicadores, fila por fila, usando el parámetro axis=1.
df.sum(axis=1)
0 -0.318036 1 -1.869017 2 2.289452 3 0.854949 4 0.899560 dtype: float64
Podéis encontrar y explorar la gran cantidad de métodos disponibles para un DataFrameen la documentación de pandas.