Entrada dedicada al manejo de datos más básico con Python y Pandas, es análoga a otra ya realizada con dplyr para R. Sirve para tener en un vistazo las tareas más habituales que realizamos en el día a día con Pandas. Para aquel que se esté introduciendo al uso de Python puede ser de utilidad tener todo junto y más claro, a mi personalmente me sirve para no olvidar cosas que ya no uso. En una sola entrada recogemos las dudas más básicas cuando nos estamos iniciando con Python. Las tareas más comunes son:
- Seleccionar columnas con python pandas
- Eliminar columnas con python pandas
- Seleccionar registros con python pandas
- Crear nuevas variables con python pandas
- Sumarizar datos con python pandas
- Ordenar datos con python pandas
- Renombrar variables con python pandas
Para variar vamos a emplear el conjunto de datos iris y que nos descargamos directamente de una url para ello las primeras sentencias que hemos de ejecutar son las siguientes:
import pandas as pd import io import requests url='https://raw.githubusercontent.com/uiuc-cse/data-fa14/gh-pages/data/iris.csv' s=requests.get(url).content df=pd.read_csv(io.StringIO(s.decode('utf-8')))
Este código es un buen ejemplo de como obtener un csv directamente de una url porque en ocasiones pueden surgir problemas.
Seleccionar columnas con Pandas Python:
Directamente
df2 = df[['sepal_length','sepal_width']] df2.head()
Mediante una lista, parece más claro.
seleccionadas = ['sepal_length','sepal_width'] df2 = df[seleccionadas] df2.head()
Eliminar columnas:
df3 = df.drop(columns=['sepal_length','sepal_width']) df3.head()
Seleccionar registros con Pandas Python:
Con condiciones simples, los operadores se pueden consultar pero no son «extraños». También se presenta la función value_counts() que es una sumarización muy habitual.
df['species'].value_counts() df4 = df[df['species']=="setosa"] df4['species'].value_counts()
Algo que tiene especial relevancia (desde mi punto de vista) son los paréntesis en condiciones complejas o múltiples cuando usamos Pandas.
df5 = df.loc[(df.sepal_length<5) & (df.species=="setosa")] df6 = df[(df['sepal_length']<5) & (df['species'] != "setosa")]
Particularmente la función isin para hacer condiciones del tipo in en listas la encuentro de mucha utilidad.
lista = ['setosa', 'virginica'] df7 = df[df['species'].isin(lista)] df7['species'].value_counts()
Crear nuevas variables con Pandas Python:
df['sepal_length_tipi'] = df['sepal_length']/df['sepal_length'].mean() df['sepal_length_tipi'].describe()
En este sentido destacaría el uso de la función de numpy where, el famoso np.where que trabaja igual que el ifelse de R.
import numpy as np df['sepal_length_altas'] = np.where(df['sepal_length'] > np.mean(df['sepal_length']), "Por encima de la media", "Por debajo de la media") df['sepal_length_altas'].value_counts()
Sumarizar datos con Pandas Python:
df[['sepal_length','species']].groupby('species').mean() df[['sepal_length','species']].groupby('species').count()
Sumarizar por múltiples columnas tienes que listar variables.
df.groupby(['species','sepal_length_altas']).min()
Ordenar data frames con Pandas Python:
df8 = df.sort_values('sepal_length',ascending=[True])
Si queremos ordenar por múltiples campos del data frame con distintos órdenes:
df9 = df.sort_values(['sepal_length','sepal_width'],ascending=[True,False])
Pero en pocas líneas quedan recogidas las principales tareas con registros y columnas que se pueden hacer en un data frame con Pandas. La siguiente entrada irá encaminada a la unión de data frames con Python y Pandas.
Renombrar variables con python pandas
df.rename(columns={'sepal_length': 'long_sepalo'}, inplace=True)