Michael Macaulay

Debe conocer las funciones de Pandas para el viaje de aprendizaje automático

Nodo de origen: 1865356

Este artículo fue publicado como parte del Blogatón de ciencia de datos

Introducción

Bueno, ¡hay una buena posibilidad de que puedas!

Para los científicos de datos que usan Python como su lenguaje de programación principal, el paquete Pandas es una herramienta de análisis de datos imprescindible. El paquete Pandas tiene todo lo que necesita un científico de datos, y cada curso nos enseñó cómo utilizarlo al principio. Es tan grande, poderoso y realiza casi todas las manipulaciones tabulares que puedas imaginar. Sin embargo, esta amplitud puede ser una desventaja en ocasiones.

Tiene muchas características hermosas que resuelven casos extremos raros, diferentes escenarios.

Uno de los inconvenientes clave de los pandas es que tiene problemas con grandes conjuntos de datos porque los pandas almacenan sus estructuras de datos en la RAM, lo que puede volverse insuficiente a medida que aumenta el tamaño de los datos. Utilice PySpark o Dask para esto.

Aunque el paquete Pandas es muy utilizado, todavía hay muchas funciones que la gente puede pasar por alto, ya sea porque se usa menos o porque desconocen su existencia. Esta publicación tiene la intención de reintroducirlo en esas características y demostrar que Pandas es mucho más competente de lo que pensaba anteriormente.

Tuberias

Para realizar la limpieza de datos de una manera concisa y compacta en pandas, se pueden usar las funciones Pipe, que le permiten combinar múltiples funciones en una sola operación.

Por ejemplo, si desea aplicar funciones como drop_duplicates, encode_categoricals, remove_outliers que aceptan sus argumentos.

df_cleaned = (diamonds.pipe (drop_duplicates). pipe (remove_outliers, ['price', 'quilate', 'depth']). pipe (encode_categoricals, ['cut', 'color', 'clarity']))

Factorizar

Esta función es una alternativa a Sklearns Label Encoder.

# Tenga en cuenta el [0] al final diamantes ["cut_enc"] = pd.factorize (diamantes ["cut"]) [0] >>> diamantes ["cut_enc"]. Muestra (5) 52103 2 39813 0 31843 0 10675 0 6634 0 Nombre: cut_enc, dtype: int64

Factorizar los resultados de una tupla de valores: el valor codificado y una lista de categorías únicas.

valores, único = pd.factorizar (diamantes ["cortar"], ordenar = Verdadero) >>> valores [: 10] matriz ([0, 1, 3, 1, 3, 2, 2, 2, 4, 2] , dtype = int64) >>> único ['Ideal', 'Premium', 'Muy bueno', 'Bueno', 'Regular']

Explotar

Explotar | funciones de pandas

Foto por Edewaa Foster on Unsplash

Explode es una función con un nombre interesante. Comencemos con un ejemplo y luego una explicación:

df = pd.Series ([1, 6, 7, [46, 56, 49], 45, [15, 10, 12]]). to_frame ("sucio") >>> df
datos | funciones de pandas
Imagen del autor

La columna de características tiene dos filas indicadas con listas. Este tipo de datos está disponible en encuestas donde algunas preguntas aceptan múltiples opciones.

>>> df.explode ("sucio", ignore_index = True)
explotar datos
Imagen del autor

Esta función toma una celda con una matriz de valores y explota en varias filas. Para mantener el orden de un índice numérico, use ignore_index como True.

Entre

Para funciones numéricas de indexación booleana dentro de un rango, aquí hay una función útil:

# Obtenga diamantes con un precio de entre 3500 y 3700 dólares diamantes [diamantes ["precio"]. Entre (3500, 3700, inclusive = "ninguno")]. Muestra (5)
entre datos | funciones de pandas
Imagen del autor

 

T

DataFrame tiene un atributo T simple, conocido como transposición. Es posible que no lo usemos con frecuencia, el método de descripción es útil al visualizar los marcos de datos.

>>> boston.describe (). T.head (10)
transponer
Imagen del autor

 

Opciones de pandas

Se puede usar la configuración global de los pandas que ayuda a modificar y cambiar los comportamientos predeterminados.

>>> dir (pd.options) ['compute', 'display', 'io', 'mode', 'plotting']

Consta de 5 módulos. Veamos las opciones disponibles debajo de la pantalla. Hay muchas opciones disponibles, pero sobre todo uso max_columns.

>>> dir (pd.options.display) ['chop_threshold', 'max_columns', 'max_colwidth', 'max_info_columns', 'max_info_rows', 'max_rows', ... 'precisión', 'show_dimensions', 'unicode' , 'ancho']

La mayoría de la gente usa max_columns y precision

# Elimina el límite para mostrar el número de columnas pd.options.display.max_columns = None # Muestra solo 5 números después del decimal pd.options.display.precision = 5 # elimina la notación científica

Convertir_tipos

Todos somos conscientes de que los pandas tienen la molesta costumbre de marcar algunas columnas como tipos de datos de objeto. En lugar de definir sus tipos directamente, puede utilizar el método convert dtypes, que intenta deducir el mejor tipo de datos:

sample = pd.read_csv ("data / station_day.csv", usecols = ["StationId", "CO", "O3", "AQI_Bucket"]) >>> sample.dtypes StationId objeto CO float64 O3 float64 AQI_Bucket objeto dtype: objeto >>> sample.convert_dtypes (). dtypes StationId string CO float64 O3 float64 AQI_Bucket string dtype: object

seleccionar_tipos

Por el nombre, creo que está claro qué hace la función. Puede utilizar las opciones de inclusión y exclusión para especificar columnas que incluyan u omitan tipos de datos específicos.

Elija solo columnas numéricas con np.number, por ejemplo:

# Elija solo columnas numéricas diamonds.select_dtypes (include = np.number) .head ()
seleccionar dtipos
Imagen del autor

 

Máscara

Esta función ayuda a reemplazar valores donde no se cumple la condición personalizada.

# Cree datos de muestra edades = pd.Series ([55, 52, 50, 66, 57, 59, 49, 60]). To_frame ("edades") edades
máscara | datos
Imagen del autor

Después de realizar la operación anterior.

enmascaramiento realizado
Imagen del autor

Min y Max

Aunque el mínimo y el máximo son bien conocidos, tiene mejores propiedades para algunos casos extremos.

index = ["Diamantes", "Titanic", "Iris", "Enfermedad cardíaca", "Préstamo predeterminado"] bibliotecas = ["XGBoost", "CatBoost", "LightGBM", "Sklearn GB"] df = pd.DataFrame ({lib: np.random.uniform (90, 100, 5) para bibliotecas en bibliotecas}, índice = índice) >>> df
min y max
Imagen del autor 

El DataFrame ficticio anterior muestra los resultados de cuatro bibliotecas de aumento de gradiente diferentes en cinco conjuntos de datos. Estamos buscando el paquete que mejor funcionó en cada conjunto de datos. He aquí cómo lograrlo con max de una manera elegante:

>>> df.max (eje = 1) Diamantes 99.52684 Titanic 99.63650 Iris 99.10989 Enfermedad cardíaca 99.31627 Préstamo predeterminado 97.96728 dtype: float64

Más grande y más pequeño

El más grande y el más pequeño son útiles para ver los valores N o ~ (N principales) de una variable.

diamantes.nlargest (5, "precio")
más grande y más pequeño
Imagen del autor
diamonds.nsmallest (5, "price")
más pequeño
Imagen del autor

 

Idxmax e Idxmin

Los pandas devuelven el número más grande / más pequeño cuando llamas al máximo o al mínimo en una columna. Sin embargo, hay situaciones en las que necesita la posición del mínimo / máximo, que estas funciones no proporcionan.

En su lugar, puede usar idxmax / idxmin:

>>> diamonds.price.idxmax () 27749 >>> diamonds.carat.idxmin () 14

Valor_Recuentos

Una forma común de encontrar el porcentaje de los valores perdidos es combinar isnull y sumar y dividir por el tamaño de la matriz.

Pero, value_counts con argumentos relevantes hace lo mismo:

vivienda = pd.read_csv ("train.csv") >>> vivienda ["FireplaceQu"]. value_counts (dropna = False, normalize = True) NaN 0.47260 Gd 0.26027 TA 0.21438 Fa 0.02260 Ex 0.01644 Po 0.01370 Nombre: FireplaceQu, dtype: float64

Cortar

La función de recorte ayuda a encontrar valores atípicos fuera de un rango y a reemplazarlos por límites estrictos.

>>> edades.clip (50, 60)
datos para el clip
Imagen del autor

 

At_time y Betweeen_time

Estas funciones son útiles al trabajar con series de tiempo de gran granularidad.

at_time ayuda a obtener valores en una fecha u hora específicas.

index = pd.date_range ("2021-08-01", periodos = 100, freq = "H") df = pd.DataFrame ({"col": list (range (100))}, index = index) >> > df.head ()
ejemplo at_time | funciones de pandas
Imagen del autor

>>> df.at_time ("15:00")

.at_time | funciones de pandas
Imagen del autor

between_time se usa para obtener filas dentro de un rango personalizado.

from datetime import datetime >>> df.between_time ("09:45", "12:00")
entre_tiempo
Imagen del autor

 

Bdate_range

Esta función ayuda a crear índices de series de tiempo con frecuencia de días hábiles. El mundo financiero tiene este tipo de frecuencia. Por tanto, esta función puede resultar útil a la hora de volver a indexar series de tiempo con la función de reindexar.

series = pd.bdate_range ("2021-01-01", "2021-01-31") # Un período de un mes >>> len (serie) 21

At y Iat

Estos dos accesos son sustancialmente más rápidos que loc e iloc. Sin embargo, tienen un inconveniente. Solo le permiten elegir o reemplazar un valor a la vez:

# [índice, etiqueta] >>> diamantes.at [234, "corte"] 'Ideal' # [índice, índice] >>> diamantes.iat [1564, 4] 61.2 # Reemplazar la fila 16541 de la columna de precios >> > diamantes. a [16541, "precio"] = 10000

ordenar

Esta función ayuda a extraer índices que ordenarían una serie de características.

tips.reset_index (inplace = True, drop = True) sort_idx = tips ["total_bill"]. argsort (kind = "mergesort") # Ahora, ordena `tips` según el total_bill tips.iloc [sort_idx] .head ()
ordenación_arg
Imagen del autor

 

Accesorio de gato

Los pandas permiten funciones integradas de Python en fechas y cadenas utilizando accesos como str o dt.

>>> diamonds.dtypes quilate categoría de corte float64 categoría de color categoría de claridad profundidad float64 tabla float64 precio int64 x float64 y float64 z float64 cut_enc int64 dtipo: objeto

Se pueden usar muchas funciones especiales usando el descriptor de acceso cat en columnas categóricas. Tiene funciones como categorías para encontrar categorías únicas, renombrar_categorías para renombrar las características.

diamonds ["new_cuts"] = diamonds ["cut"]. cat.rename_categories (list ("ABCDE")) >>> diamantes ["new_cuts"]. cat.categories Index (['A', 'B', ' C ',' D ',' E '], dtype =' objeto ')

Consulte esto para obtener una lista más detallada de funciones en accesorio de gato.

Apretar

Apretar es una función que se utiliza en circunstancias extremas raras pero agravantes.

Cuando se devuelve un solo valor de una condición utilizada para subconjuntar un DataFrame, este es uno de estos casos. Considere el siguiente escenario:

subconjunto = diamonds.loc [diamonds.index >> subconjunto
precio

Incluso si solo hay una celda, devuelve el DataFrame. Es un inconveniente ya que ahora debe usar.loc con el nombre de la columna y el índice para obtener el precio.

No tienes que hacerlo si sabes apretar. Se puede eliminar un eje de un DataFrame o Serie de una sola celda usando esta función. Considere el siguiente escenario:

>>> subconjunto.squeeze () 326

Es posible especificar el eje a eliminar. Solo había vuelto escalar ahora.

>>> subset.squeeze ("columnas") # o "filas" 0 326 Nombre: precio, dtype: int64

Tenga en cuenta que esta función solo funciona para Series o DataFrame con valores únicos.

Excel_escritor

Es una clase genérica para crear archivos de Excel y escribir DataFrame en él. Considere, tenemos estos dos conjuntos de datos.

# Cargue dos conjuntos de datos diamonds = sns.load_dataset ("diamonds") tips = sns.load_dataset ("tips") # Escriba en el mismo archivo de Excel con pd.ExcelWriter ("data / data.xlsx") como escritor: diamonds.to_excel (escritor, sheet_name = "diamantes") tips.to_excel (writer, sheet_name = "tips")

Tiene propiedades para especificar el formato de fecha y hora a usar, ya sea que necesite un nuevo archivo o modificar uno existente, qué sucede si existe una hoja. Mira esto documentación para más información.

Conclusión

No es una descripción exhaustiva de los pandas, y la documentación contiene más información sobre el código y las características. Le recomiendo que experimente con diferentes variaciones de los fragmentos de código que se proporcionan aquí, así como con varios parámetros. Uno puede comprender completamente el poder de los pandas haciendo esto.

Bibliotecas como Dask y datatable están desplazando gradualmente a Pandas con sus nuevas características llamativas para manejar grandes conjuntos de datos, Pandas sigue siendo la herramienta de manipulación de datos más utilizada en la comunidad de ciencia de datos de Python. Debido a lo bien que encaja en la pila SciPy actual, la biblioteca sirve como paradigma para que otros paquetes lo sigan y compilen.

Espero que esta publicación haya sido reveladora y gracias por leer.

Los medios que se muestran en este artículo no son propiedad de Analytics Vidhya y se utilizan a discreción del autor.

Fuente: https://www.analyticsvidhya.com/blog/2021/08/must-know-pandas-functions-for-machine-learning-journey/

Sello de tiempo:

Mas de Analítica Vidhya