estadistica.ar · Enciclopedia de Estadística en españolhttps://estadistica.ar/conceptos/primeros-pasos-en-python
Primeros pasos en Python para Estadística
Lo mínimo de pandas para importar, explorar y describir una base, y cuándo conviene Python en vez de R.
Por Jorge Luis Montivero, Licenciado en Estadística · Mu3Sigma
1 · Python o R
Los dos hacen lo mismo para Estadística descriptiva e inferencia básica. La diferencia está en el entorno:
| R | Python | |
|---|---|---|
| Fuerte en | Estadística, gráficos, informes | Datos a escala, automatización, integración |
| Ecosistema | Paquetes estadísticos muy completos | Todo lo demás también |
| Curva inicial | Más corta para análisis | Más corta si ya programás |
| En la academia | Dominante en ciencias sociales y salud | Dominante en ingeniería y datos |
Lo importante es elegir uno y aprenderlo bien. Los conceptos se transfieren.
2 · Lo mínimo que hay que instalar
La forma más simple es Anaconda, que trae Python y las librerías de datos
juntas. La alternativa liviana es Python oficial más pip install pandas matplotlib scipy.
Para trabajar, dos opciones:
- Jupyter Notebook: código y resultados intercalados. Cómodo para explorar.
- Un script
.pyen cualquier editor. Mejor para procesos que se repiten.
3 · Las tres librerías
import pandas as pd # datos en tablas
import numpy as np # cálculo numérico
import matplotlib.pyplot as plt # gráficos
Esos tres alias —pd, np, plt— son convención universal. Conviene
respetarlos: todo el código que vas a encontrar los usa.
pandas es el equivalente del data frame de R. Un DataFrame es una
matriz de datos: filas de casos, columnas de
variables.
4 · El flujo completo
# 1 · Importar
datos = pd.read_csv("ingresos-eph.csv")
# 2 · Mirar qué llegó
datos.shape # filas y columnas
datos.info() # tipo de cada columna y cuántos no nulos
datos.head()
datos.describe()
# 3 · Descriptivos
datos["ingreso_ocup_principal"].mean()
datos["ingreso_ocup_principal"].median()
datos["ingreso_ocup_principal"].std()
datos["ingreso_ocup_principal"].quantile([0.25, 0.5, 0.75])
# 4 · Una variable categórica
datos["nivel_ed"].value_counts()
datos["nivel_ed"].value_counts(normalize=True).mul(100).round(1)
# 5 · Por grupo
datos.groupby("sexo")["ingreso_ocup_principal"].agg(["median", "count"])
# 6 · Gráficos
datos["ingreso_ocup_principal"].plot.hist(bins=20)
datos.boxplot(column="ingreso_ocup_principal", by="sexo")
# 7 · Con ponderadores
np.average(datos["ingreso_ocup_principal"], weights=datos["ponderador"])
5 · Qué devuelve ese código sobre el archivo del caso
Corrido entero, funciona sin un error. Pero tres líneas devuelven algo que no es lo que se espera.
describe() promedia códigos
Las columnas aglomerado, sexo, nivel_ed y cat_ocup son categorías
guardadas como números, y describe() les calcula media y desvío igual: informa
un aglomerado medio de 23,3 y un sexo medio de 1,5. Es el mismo problema
que summary() en R, con la misma solución:
convertirlas a categóricas antes de describir.
value_counts() ordena por frecuencia, no por código
nivel_ed
4 5081 6 3669 3 2439
5 2190 2 1686 1 349 7 34
plot.hist(bins=20) no muestra nada
Sobre estos ingresos, veinte bins dejan el 93,9 % de los casos en la primera barra y nueve bins vacíos, porque hay un máximo de $40.000.000 que estira la escala.
| Regla | Bins | % en la barra mayor | Bins vacíos |
|---|---|---|---|
bins=20 (el tutorial) | 20 | 93,9 % | 9 |
bins="sturges" | 15 | 96,2 % | 6 |
bins="fd" | 665 | 8,1 % | 577 |
| Recortando en el percentil 99 | 30 | 13,0 % | 0 |
| En escala logarítmica | 30 | 15,7 % | 1 |
6 · Las cuatro cosas que confunden al principio
Los índices arrancan en cero. datos.iloc[0] es la primera fila. Viniendo de
R o de Excel, es el ajuste más molesto.
.loc y .iloc. .loc selecciona por etiqueta, .iloc por posición. Es la
fuente de errores más común de pandas.
pandas ignora los faltantes en silencio. .mean() los saltea sin avisar,
al revés que R. Hay que acordarse de mirar .isna().sum().
.std() de pandas usa y np.std() usa . Dos librerías que se
usan juntas, con defaults distintos. Ver
por qué n−1.
Cuánto importa depende del tamaño:
.std() | np.std() | Diferencia | |
|---|---|---|---|
| 15.448 (el caso) | 1.003.821,29 | 1.003.788,80 | 0,003 % |
| 5 | 3,9623 | 3,5440 | 11,8 % |
7 · Para inferencia
pandas describe; para pruebas de hipótesis hacen falta otras librerías:
from scipy import stats
stats.ttest_ind(grupo_a, grupo_b, equal_var=False)
stats.chi2_contingency(tabla)
import statsmodels.formula.api as smf
modelo = smf.ols("ingreso ~ edad + C(sexo)", data=datos).fit()
modelo.summary()
scipy para pruebas puntuales, statsmodels para modelos con salida estadística completa —la que se parece a la de R o SPSS—.
8 · Errores frecuentes
- Usar
scikit-learnpara inferencia. No da lo que hace falta. - Confundir
.loccon.iloc. - No revisar los faltantes, porque pandas no avisa.
- Mezclar
np.std()con.std()y comparar los resultados. Con muestras chicas la diferencia llega al 12 %. - Confiar en que numpy avisa de los faltantes.
np.mean(serie)delega en pandas y los saltea; sólonp.mean(serie.to_numpy())devuelvenan. - Leer una distribución ordinal con
value_counts()sin.sort_index(). Sale ordenada por frecuencia y parece ordenada por categoría. - Aceptar el histograma que sale. Con variables muy asimétricas, ninguna regla de bins alcanza: hay que recortar la cola o pasar a escala logarítmica.
- Trabajar solo en notebooks sin orden de celdas. Un notebook ejecutado salteado deja de ser reproducible. Conviene correrlo de arriba abajo antes de dar por bueno un resultado.
- Rutas absolutas. Igual que en R.
SettingWithCopyWarningignorado. Ese aviso indica que estás modificando una vista y no el original; la modificación puede perderse. Se resuelve con.copy().
Herramientas de este tema
Seguir leyendo
Bioestadística · Cómputo y comunicación · 289 de 330
Estadística para Economía y Administración · Cómputo y comunicación · 294 de 318
Probabilidad y Estadística · Cómputo y comunicación · 282 de 302
Cómo citar: Montivero, J. L. (2026). Primeros pasos en Python para Estadística. estadistica.ar. https://estadistica.ar/conceptos/primeros-pasos-en-python
estadistica.ar es gratuita y sin publicidad. Si te sirvió, podés invitar un cafecito por transferencia al alias mu3sigma. Asesoramiento estadístico, encuestas y capacitaciones: m3s.pro · WhatsApp +54 9 383 499-7929.
Cómo citar esta entrada
APA (7.ª edición)
Montivero, J. L. (2026). Primeros pasos en Python para Estadística. estadistica.ar. https://estadistica.ar/conceptos/primeros-pasos-en-python
BibTeX
@misc{estadistica_ar_primeros_pasos_en_python,
author = {Montivero, Jorge Luis},
title = {{Primeros pasos en Python para Estadística}},
year = {2026},
howpublished = {\url{https://estadistica.ar/conceptos/primeros-pasos-en-python}},
note = {estadistica.ar. Consultado el \today},
urldate = {2026-09-28}
}Última actualización: 28 de septiembre de 2026. El contenido está bajo licencia CC BY-NC-SA 4.0: se puede reutilizar citando la fuente y sin fines comerciales.