Python

Tema 4 · Pandas

Introducció

Pandas és la biblioteca de referència per manipular i analitzar dades tabulades en Python. Les seves estructures principals, Series i DataFrame, permeten carregar fitxers CSV, netejar dades, filtrar, agrupar i fer càlculs estadístics de manera senzilla i eficient. En farmacologia computacional, Pandas és ideal per gestionar grans conjunts de compostos químics.

Objectius

  • Crear DataFrames a partir de diccionaris o fitxers CSV
  • Explorar dades amb head(), info(), describe()
  • Filtrar files segons condicions
  • Fer agrupacions (groupby) i agregacions
  • Exportar resultats a CSV

Càrrega i exploració de dades

Exemple amb dades de fàrmacs:

import pandas as pd

# Crear un DataFrame des d'un diccionari
dades = {
    'farmac': ['Ibuprofè', 'Paracetamol', 'Amoxicil·lina', 'Omeprazol'],
    'pes_molecular': [206.3, 151.2, 365.4, 345.4],
    'logP': [3.5, 0.5, 0.9, 2.2],
    'dosi_mg': [400, 500, 250, 20]
}
df = pd.DataFrame(dades)

print(df.head())
print("\nEstadístiques bàsiques:")
print(df.describe())

Filtratge i noves columnes

# Carregar un CSV (exemple: dataset de molècules)
# df = pd.read_csv("molecules.csv")

# Filtrar compostos amb pes molecular < 500 Da
df_petits = df[df['pes_molecular'] < 500]
print(f"Compostos amb MW < 500: {len(df_petits)}")

# Crear una nova columna amb la dosi ajustada
df['dosi_ajustada'] = df['dosi_mg'] * 0.8
print(df[['farmac', 'dosi_mg', 'dosi_ajustada']])

Agrupacions i agregacions

Agrupar per categories i calcular estadístiques:

# Afegir una columna de categoria
df['categoria'] = ['AINE', 'Analgèsic', 'Antibiòtic', 'Antiàcid']

# Agrupar per categoria i calcular mitjanes
resum = df.groupby('categoria').agg({
    'pes_molecular': 'mean',
    'dosi_mg': ['min', 'max']
})
print(resum)

Exercicis

  1. Crea un DataFrame amb 10 medicaments, les seves dosis i el preu. Calcula el preu per mg de cada un.
  2. Carrega un fitxer CSV de pacients (nom, edat, glucosa) i filtra els que tenen glucosa > 110 mg/dL.
  3. Agrupa per tipus de fàrmac i calcula la mitjana de pes molecular i la desviació estàndard.

Mini Projecte – Biblioteca molecular amb Pandas

Processa un dataset de compostos amb les següents tasques:

  • Carrega un fitxer CSV amb almenys 50 molècules (columnes: id, nom, MW, LogP, HBD, HBA).
  • Mostra les primeres 10 files i les estadístiques generals.
  • Filtra els compostos que compleixen la regla de Lipinski (MW ≤ 500, LogP ≤ 5, HBD ≤ 5, HBA ≤ 10) i guarda el resultat en un nou DataFrame.
  • Afegeix una columna amb el percentatge de compliment de Lipinski per a cada molècula.
  • Exporta el DataFrame filtrat a un fitxer compostos_lipinski.csv.