DataFrame de Ejemplo
# DataFrame de ejemplo para todas las operaciones
data = {
'Nombre': ['Ana', 'Luis', 'Carlos', 'Marta', 'Lucía', 'Jorge'],
'Edad': [28, 34, 29, 42, 31, 25],
'Ciudad': ['Madrid', 'Barcelona', 'Madrid', 'Valencia', 'Barcelona', 'Sevilla'],
'Puntuacion': [85.5, 90.3, 88.0, 92.1, 86.7, 78.8],
'Activo': [True, False, True, True, False, True]
}
df = pd.DataFrame(data)
df
Instalación e Importación
# Instalación vía conda
%conda install pandas numpy matplotlib
# Importación estándar
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
Otras operaciones
# Tipo de dato de una Serie (columna)
type(df['Puntuacion'])
# Crear una Serie con un rango de números
numeros = np.arange(1, 6)
serie_numeros = pd.Series(numeros, index=numeros)
# Operaciones vectorizadas
cuadrados = serie_numeros ** 2
cuadrados
Series (Array unidimensional etiquetado)
Crear una Serie
# A partir de un array de numpy
s1 = pd.Series(np.array([1,2,3,4,5,6]))
# Con índices personalizados
notas = np.array([5,10,7,8])
alumnos = np.array(["Estudiante 1","Estudiante 2","Estudiante 3","Estudiante 4"])
s2 = pd.Series(notas, index=alumnos)
# Desde un diccionario
notas_dict = {'Estudiante 1': 5, 'Estudiante 2': 10}
s3 = pd.Series(notas_dict)
Asignación de valores
s3['Estudiante 1'] = 10
s3[1] = 8
s3[2:] = 9
DataFrames (Estructura bidimensional similar a una tabla)
Crear un DataFrame
# Desde un diccionario de Series
asignaturas = ['Asignatura 1','Asignatura 2']
notas = {
'Estudiante 1': pd.Series([10,2], index=asignaturas),
'Estudiante 2': pd.Series([9,6], index=asignaturas)
}
df1 = pd.DataFrame(notas)
# Desde un diccionario de listas
notas_list = {'María': [10,2,5,6], 'Jose':[9,6,7,4.5]}
df2 = pd.DataFrame(notas_list)
df2.index = ['Asignatura 1','Asignatura 2','Asignatura 3','Asignatura 4']
Modificación del DataFrame
Añadir y Eliminar
# Añadir una columna
# Parámetros: posición, nombre_columna, datos
df.insert(2, 'Es_de_Madrid', df['Ciudad'] == 'Madrid')
# Borrar una columna por nombre
del df['Es_de_Madrid']
# Borrar múltiples columnas
# inplace=True modifica el DataFrame original
df.drop(columns=['Puntuacion', 'Activo'], inplace=True)
# Eliminar filas por índice
# Parámetros: index=[lista_de_indices]
df.drop(index=[0, 1], inplace=True)
Modificar Valores
# Modificar un valor por etiqueta (.loc)
df.loc[2, 'Nombre'] = 'Carlos Alberto'
# Aplicar una función a una columna
df['Puntuacion_100'] = df['Puntuacion'].apply(lambda x: x / 10)
# Reemplazar valores específicos de una columna
# Parámetros: valor_a_reemplazar, nuevo_valor
df['Ciudad'].replace('Madrid', 'Madrid Capital', inplace=True)
Lectura y Escritura
Operaciones de Entrada/Salida
# Leer desde un CSV
df = pd.read_csv("data/FuelConsumption.csv")
# Leer CSV con parámetros
df_custom = pd.read_csv("data.csv", sep=';', header=1)
# Escribir a un CSV
# index=False evita guardar el índice del DataFrame como una columna
df.to_csv('nuevo.csv', index=False)
# Leer CSV especificando columnas y tipos
df_optimizado = pd.read_csv("retribuciones_alcaldes_2021.csv", names=['AYUNTAMIENTO', 'TOTAL PERCIBIDO'], dtype={'TOTAL PERCIBIDO': float}, decimal=',', thousands='.')
# Leer EXCEL
df_excel = pd.read_excel("fichero.xlsx")
# Leer EXCEL con parámetros de hoja, cabecera, columnas y filas a saltar
df_excel = pd.read_excel("fichero.xlsx", sheet_name=nombreHoja, names=cabecera, usecols=columna, skiprows=fila)
# Escribir a EXCEL
# index=False evita guardar el índice del DataFrame como una columna
df.to_excel('nuevo.xlsx', index=False)
# Escribir a JSON
# orient='records' para formato lista de registros, indent=4 para legibilidad
df.to_json('nuevo.json', orient='records', indent=4)
# Escribir a XML (requiere lxml)
# %conda install lxml
df.to_xml('nuevo.xml')
# Escribir a Parquet (requiere pyarrow o fastparquet)
# %conda install pyarrow fastparquet
df.to_parquet('nuevo.parquet')
Inspección de Datos
Métodos de Inspección
df.info() # Resumen del conjunto (tipos, nulos)
df.head() # Muestra las primeras 5 filas
df.tail() # Muestra las últimas 5 filas
df.describe() # Resumen estadístico de columnas numéricas
df.shape # Dimensiones del conjunto (filas, columnas)
df.keys() # Obtiene los nombres de las columnas o claves del df
df.dtypes # Tipos de datos de cada columna
df.nunique() # Número de valores únicos (distintos) por columna
Selección y Filtrado
Selección
# Acceder a un elemento
df.iloc[0,2] # Por posición (Fila 0, Columna 2)
df.at[2,'Ciudad'] # Por etiqueta (Fila con índice 2, Columna 'Ciudad')
# Seleccionar columnas
df['Puntuacion'] # Como Serie
df[['Nombre','Puntuacion']] # Como DataFrame
Filtrado
# Filtrado condicional
df_filtrado = df[df['Edad'] > 30]
# Múltiples condiciones
df_multi = df[(df['Edad'] > 30) & (df['Activo'] == True)]
Limpieza de Datos
Nulos, Duplicados y Renombrado
# Contar valores nulos por columna
df.isnull().sum()
# Eliminar filas con valores nulos
df.dropna(inplace=True)
# Eliminar filas duplicadas
df.drop_duplicates(inplace=True)
# Renombrar columnas
df.rename(columns={'old_name': 'new_name'}, inplace=True)
Concatenar y Contar
# Concatenar DataFrames
df_concatenado = pd.concat([df1, df2])
# Conteo de valores (útil para encontrar inconsistencias)
df['Ciudad'].value_counts()
Operaciones y Agregaciones
Operaciones Comunes
# Media de una columna
df['Edad'].mean()
# Suma de una columna
df['Puntuacion'].sum()
# Conteo de valores
df['Ciudad'].value_counts()
# Agrupación (Group By)
df.groupby('Ciudad')['Puntuacion'].mean()
Gráficas
Parámetros Comunes de Gráficas
kind: Tipo de gráfica. Valores comunes: 'line', 'bar', 'barh', 'hist', 'box', 'kde', 'density', 'area', 'pie', 'scatter', 'hexbin'.
x, y: Nombres de las columnas para los ejes X e Y.
title: Título de la gráfica.
xlabel, ylabel: Etiquetas para los ejes X e Y.
color: Especifica el color de los elementos de la gráfica.
figsize: Tupla (ancho, alto) en pulgadas para el tamaño de la figura.
grid: Booleano para mostrar una rejilla (True/False).
legend: Booleano para mostrar (True) u ocultar (False) la leyenda.
subplots: Booleano para crear subplots por columna.
layout: Tupla para la disposición de los subplots (filas, columnas).
rot: Rotación de las etiquetas del eje X en grados.
fontsize: Tamaño de la fuente para las etiquetas de los ejes.
Gráfica de Puntos (Scatter)
df.plot(
kind='scatter',
x='Edad',
y='Puntuacion',
color='DarkBlue',
figsize=(10,5)
)
plt.show()
Gráfica de Barras
df.plot(
kind='bar',
x='Nombre',
y='Puntuacion',
color='Orange',
figsize=(10,5)
)
plt.show()