¿Cómo crear un DataFrame en pandas?
Respuesta corta: importa pandas con import pandas as pd y pasa tus datos a pd.DataFrame(). La forma más habitual es un diccionario de listas: cada clave es el nombre de una columna y cada lista, sus valores.
import pandas as pd
datos = {
"nombre": ["Ana", "Luis", "Marta"],
"edad": [28, 34, 25],
"ciudad": ["Madrid", "Lima", "Bogotá"],
}
df = pd.DataFrame(datos)
print(df) nombre edad ciudad
0 Ana 28 Madrid
1 Luis 34 Lima
2 Marta 25 Bogotápandas crea un índice numérico (0, 1, 2) y deduce el tipo de cada columna. También puedes crear un DataFrame a partir de una lista de listas, una lista de diccionarios, un array de NumPy o un archivo CSV, como verás más abajo.
Un DataFrame es una tabla: filas con un índice y columnas con nombre.
Sintaxis de pd.DataFrame()
pd.DataFrame(data=None, index=None, columns=None, dtype=None, copy=None)| Parámetro | Qué hace |
|---|---|
data | Los datos: un diccionario, una lista de listas, una lista de diccionarios, un array de NumPy, una Serie u otro DataFrame |
index | Las etiquetas de las filas. Si no lo pasas, pandas usa 0, 1, 2... |
columns | Los nombres de las columnas. Es obligatorio en la práctica cuando data es una lista de listas |
dtype | Fuerza un tipo para todas las columnas, por ejemplo "float64" o str |
copy | Copia los datos de entrada en lugar de compartirlos |
Formas de crear un DataFrame en pandas
Desde un diccionario de listas
Es la forma del ejemplo de arriba. Cada clave es una columna, y todas las listas deben tener la misma longitud.
Desde una lista de listas
Cada lista interna es una fila. Pasa los nombres de las columnas con columns:
filas = [["Ana", 28], ["Luis", 34], ["Marta", 25]]
df = pd.DataFrame(filas, columns=["nombre", "edad"])
print(df) nombre edad
0 Ana 28
1 Luis 34
2 Marta 25Desde una lista de diccionarios
Cada diccionario es una fila. Es el formato en que llegan muchos datos de una API en JSON. Si a una fila le falta una clave, pandas rellena el hueco con NaN:
productos = [
{"producto": "Café", "precio": 2.5},
{"producto": "Té", "precio": 2.0, "stock": 40},
]
print(pd.DataFrame(productos)) producto precio stock
0 Café 2.5 NaN
1 Té 2.0 40.0Desde una lista simple
Una lista de valores crea una sola columna:
redes = ["Facebook", "Instagram", "YouTube"]
print(pd.DataFrame(redes, columns=["red"])) red
0 Facebook
1 Instagram
2 YouTubeCon un índice propio
ventas = pd.DataFrame({"ventas": [120, 90, 150]}, index=["ene", "feb", "mar"])
print(ventas) ventas
ene 120
feb 90
mar 150Con un índice con nombre puedes leer una fila con ventas.loc["feb"].
Desde dos o más listas sueltas
Si tienes una lista por columna, júntalas en un diccionario:
nombres = ["Ana", "Luis"]
edades = [28, 34]
df = pd.DataFrame({"nombre": nombres, "edad": edades})pd.DataFrame(list(zip(nombres, edades)), columns=["nombre", "edad"]) da el mismo resultado.
Desde un array de NumPy
import numpy as np
print(pd.DataFrame(np.arange(6).reshape(2, 3), columns=["a", "b", "c"])) a b c
0 0 1 2
1 3 4 5Desde un diccionario anidado
Con un diccionario de diccionarios, las claves externas pasan a ser columnas. Si quieres que sean filas, usa from_dict() con orient="index":
notas = {"Ana": {"mates": 8, "historia": 9}, "Luis": {"mates": 6, "historia": 7}}
print(pd.DataFrame.from_dict(notas, orient="index")) mates historia
Ana 8 9
Luis 6 7Un DataFrame vacío
vacio = pd.DataFrame()
con_columnas = pd.DataFrame(columns=["nombre", "edad"])
print(vacio.empty, len(con_columnas)) # True 0Si vas a ir añadiendo filas en un bucle, es más rápido guardarlas en una lista de diccionarios y crear el DataFrame al final con pd.DataFrame(lista).
Desde un archivo CSV o Excel
En proyectos reales, la mayoría de los DataFrames salen de un archivo:
df = pd.read_csv("ventas.csv")
df = pd.read_excel("ventas.xlsx") # necesita openpyxl