Pandas Cheatsheet

Pandas Logo

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()
Ejemplo de gráfica de puntos

Gráfica de Barras


df.plot(
    kind='bar', 
    x='Nombre', 
    y='Puntuacion', 
    color='Orange',
    figsize=(10,5)
)
plt.show()
Ejemplo de gráfica de barras