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
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
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)
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)
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)
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 ()
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
Después de realizar la operación anterior.
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
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")
diamonds.nsmallest (5, "price")
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)
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 ()
>>> df.at_time ("15:00")
between_time se usa para obtener filas dentro de un rango personalizado.
from datetime import datetime >>> df.between_time ("09:45", "12:00")
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 ()
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
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.
Relacionado:
- "
- 100
- 7
- Todos
- análisis
- Analytics
- argumentos
- artículo
- MEJOR
- impulsar
- Boston
- build
- llamar al
- cases
- el cambio
- Limpieza
- código
- Columna
- Algunos
- vibrante e inclusiva
- Calcular
- Creamos
- datos
- análisis de los datos
- Ciencia de los datos
- científico de datos
- Fechas
- HIZO
- Enfermedades
- dólares
- Southern Implants
- Excel
- experimento
- feria
- Feature
- Caracteristicas
- financiero
- Nombre
- seguir
- formato
- función
- Buscar
- candidato
- Crecer
- Manejo
- práctico
- esta página
- Alta
- Cómo
- Como Hacer
- HTTPS
- índice
- información
- IT
- Clave
- idioma
- large
- aprendizaje
- Biblioteca
- Lista
- Listas
- carga
- préstamo
- máquina de aprendizaje
- Manipulación
- máscara
- Medios
- Nuevas características
- números
- Opciones
- Otro
- paradigma
- Personas
- tubo
- industria
- Precisión
- Premium
- presente
- precio
- Programación
- Python
- RAM
- distancia
- Reading
- Resultados
- Ciencia:
- los científicos
- Serie
- sencillos
- Tamaño
- So
- RESOLVER
- comienzo
- tiendas
- equipo
- recomendaciones
- parte superior
- Unicode
- us
- propuesta de
- Ver
- QUIENES
- dentro de
- funciona
- mundo
- escritor
- la escritura
- X