Truco Python. Seleccionar o eliminar variables de un data frame en base a un prefijo, sufijo o si contienen un caracter

A la hora de seleccionar las características de un data frame, es posible que nos encontremos con la necesidad de seleccionar o eliminar características del data frame y que el nombre de esas características tenga un determinado patrón. Esta labor la podemos realizar mediante selección de elementos en listas; en esta entrada del blog vamos a tener tres tipos de selecciones: Seleccionar o eliminar aquellas variables que empiezan por un determinado prefijo. Seleccionar o eliminar aquellas variables que contienen una cadena de caracteres. Seleccionar o eliminar aquellas variables que finalizan con un sufijo. Para ilustrar este trabajo, generamos un data frame con datos aleatorios y 10 columnas: ...

22 de mayo de 2018 · rvaquerizo

Truco Python. Agrupar variable en función de la frecuencia

Me ha surgido la necesidad de crear una nueva variable en un data frame a partir de la frecuencia de otra; es decir, quedarme con los valores más frecuentes y aplicar una categoría “resto” para aquellos valores que no estén entre los más frecuentes. Para realizar esto, se me ha ocurrido la siguiente función en Python: def agrupa_frecuencia(var_origen, var_destino, df, grupos, valor_otros): df_grp = df[var_origen].value_counts() list_grp = list(df_grp.iloc[0:grupos,].index) df[var_destino] = df[var_origen].map(lambda x: x if x in list_grp else valor_otros, na_action='ignore') Es una función con más parámetros que líneas, pero necesitamos una variable de origen, una variable de destino que será la que calcularemos, el data frame sobre el que realizamos la tarea, el número de grupos más otro que será el «resto» y dar un valor a ese «resto». La función lo que hace es una tabla de frecuencias ordenada descendentemente con value_counts() y creamos una lista con el número de grupos que deseamos. Por último, mediante lambdas, si la variable origen está en la lista generada anteriormente le asignamos el mismo valor; en caso contrario, asignamos el valor «resto». ...

18 de mayo de 2018 · rvaquerizo

Truco Python. Restar meses con formato YYYYMM

La operación con fechas en meses con el formato YYYYMM es tarea habitual cuando trabajamos con tablas particionadas. De hecho, hay una entrada en el blog sobre esto muy popular. Me ha surgido este tema con Python y os pongo la función que he creado: def dif_mes(d1, d2): return (d1 // 100 - d2 // 100) * 12 + d1 % 100 - d2 % 100 # Ejemplo de uso print(dif_mes(201812, 201709)) Muy sencilla, por si os surge la necesidad. Saludos.

10 de abril de 2018 · rvaquerizo

Preparar nuestros datos para sklearn. Pasar de string a número

Cuando trabajamos con Python y scikit-learn necesitamos que todos los datos que vamos a modelizar sean numéricos; si tenemos variables carácter, necesitamos previamente transformarlas a números. La forma más rápida para realizar esta tarea es emplear preprocessing de scikit-learn: import pandas as pd dias_dict = {'dia': ['lunes', 'martes', 'viernes', 'miercoles', 'jueves', 'martes', 'miercoles', 'jueves', 'lunes']} dias_df = pd.DataFrame(dias_dict) dias_df Creamos un data frame a partir de un diccionario que se compone de los días de la semana; ahora vamos a codificar las etiquetas con el LabelEncoder de scikit-learn: ...

24 de octubre de 2017 · rvaquerizo

Pasando de SAS a R. Primer y ultimo elemento de un campo agrupado de un data frame

Las personas que están acostumbradas a trabajar con SAS emplean mucho los elementos FIRST., LAST. y BY; en el blog hay ejemplos al respecto. En R podemos hacer este trabajo con la librería “estrella” dplyr de un modo relativamente sencillo. A continuación se presenta un ejemplo para entender mejor cómo funciona; creamos un conjunto de datos aleatorio: id <- rpois(100, 20) mes <- rpois(100, 3) + 1 importe <- abs(rnorm(100)) * 100 df <- data.frame(id, mes, importe) Tenemos un identificador, una variable mes y un importe y deseamos obtener el menor importe por mes. El primer paso a realizar es ordenar el data frame de R por ese identificador, el mes y el importe en orden descendente: ...

19 de octubre de 2017 · rvaquerizo

Truco Python. Reemplazar una cadena de caracteres en los nombres de las columnas de un data frame

Más largo el título de la entrada que la entrada en sí misma. Tenemos un conjunto de datos que os podéis descargar de este link que ya es conocido. Os descargáis los datos y creamos un data frame que tiene 10.000 registros y 251 columnas; casi todas se llaman attx y queremos cambiar el nombre a columna_x. Mi sugerencia para hacerlo vía pandas en Python es: import pandas as pd df = pd.read_csv('C:\\temp\\wordpress\\au2_10000.csv') df.head() # Reemplazamos 'att' por 'columna_' en los nombres de las columnas df.columns = df.columns.str.replace('att', 'columna_') df.head() Espero que sea de utilidad. Saludos.

22 de julio de 2017 · rvaquerizo

Truco Python. Largo de una variable numérica

Hoy he tenido que determinar la longitud de una variable numérica de un data frame en Python y, tras pegarme unos minutos con len(), he encontrado la fórmula con str.len(). El ejemplo es: df['largo_numero'] = df['variable_numerica'].astype(str).str.len() Previamente transformamos a str mediante astype(str) y posteriormente aplicamos la función len. Me ha parecido interesante traerlo. Saludos.

8 de junio de 2017 · rvaquerizo

Parámetros en las consultas de Hive. Ejemplo con fechas

Soy cinturón blanco de Hive, pero aprovecho el blog para mostraros cómo he añadido unas variables a mi consulta de Hive; en realidad espero que algún alma caritativa me indique alguna forma más elegante. Necesito que mis consultas vayan parametrizadas por fechas que hacen mención a particiones de la tabla; estas particiones no son variables fecha, son strings con el formato YYYYMMDD, así que es necesario transformar las variables para realizar operaciones con ellas. En este caso tengo una fecha inicio y quiero irme tres meses hacia atrás: ...

18 de mayo de 2017 · rvaquerizo

Truco Excel. Unir todos los libros en una hoja

Los trucos de Excel referentes a la unión de varios libros en uno tienen mucho éxito en esta web; además, era necesario crear una versión que uniera de forma vertical. No es una unión como la que pueda hacer Power Query de anexar tablas con cierto sentido teniendo en cuenta el nombre de las columnas y demás; se trata de unir todas las celdas de un conjunto de libros de forma vertical en otro libro resultante, como ilustra la figura de arriba. Se unirán todos los campos unos encima de otros, independientemente de si se llaman igual o no; si queremos anexar tablas de forma rigurosa, es recomendable usar herramientas más específicas. ...

14 de marzo de 2017 · rvaquerizo

Truco Excel. Actualizar el filtro de todas las tablas dinámicas de mi libro

Traigo hoy al blog una macro de Excel que nos permite recorrer todas las hojas de un libro y, dentro de las hojas, nos permite recorrer todas las tablas dinámicas y actualizar un campo. Cuando tenemos un informe que se basa en tablas dinámicas y tiene una actualización mensual, nos podemos encontrar con la necesidad de cambiar sólo un elemento de la tabla dinámica para actualizar el informe. Éste era el caso de mi compañera; hay una entrada en el blog que ya trataba el tema, pero esta nueva macro supone otra vuelta de tuerca sobre ella: no sólo recorre y actualiza todas las tablas dinámicas de una hoja, además lo hace de todo el libro. El código de Visual Basic para Excel es: ...

10 de marzo de 2017 · rvaquerizo