No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Extendiendo la API de Pandas

5/21
Recursos

Aportes 20

Preguntas 1

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

Yo lo estoy trabajando en VS y me daba problema correr el %run.

Esto sucedio ya que no habia instalado en mi ambiente la libreria de jupyter

Les dejo el codigo para que lo puedan solucionar

conda activate your_env
pip install jupyter

Crear una nueva clase para extender Pandas

Creamos una clase y dentro de ella todos lo metodos que necesitemos. Para poder hacer accesible los metodos, utilizamos un decorador de pandas para acceder a la clase mediante una palabra clave

@pd.api.extensions.register_dataframe_accessor("missing")  #Decorador
class MissingMethods:                                      #clase
    def __init__(self, pandas_obj):
        self._df = pandas_obj

    def number_missing(self):                        #metodo para contar datos faltantes
        return self._df.isna().sum().sum()

    def number_complet(self):                        #metodo para contar datos completos
        return self._df.size - self._df.missing.number_missing()

Para acceder a los metodos se procede como sigue:

# actualizamos el dataframe para que se guarden los cambios
df = pd.DataFrame(df)

# accediendo al metodo number_missing
df.missing.number_missing()

#accediendo al metodo number_complet
df.missing.number_complet()

Basicamente esto seria para automatizar algunos procesos en el manejo de datos, con funciones integradas dentro del mismo pandas.

Este curso no tiene mucho desde que sali贸 pero buscando un poco acerca de pandas-missing-extension, encontr茅 un GitHub del profesor donde ha generado esa funci贸n para instalar e importarla directamente. Pueden encontrarlo aqu铆: https://github.com/jvelezmagic/pandas-missing
.
La instalaci贸n es con

pip install pandas-missing

Y se importa con

import pandas_missing

PD: Importante notar que la importaci贸n es con 鈥淿鈥 y la instalaci贸n con 鈥-鈥. En el GitHub podr谩n ver que tiene los mismos m茅todos de la clase e incluso m谩s como proportion_complete() y otros.

5. Extendiendo la API de Pandas

  • Es muy buena pr谩ctica modularizar el c贸digo para mejorar el flujo de trabajo, as铆 si quiero modificar el c贸digo de una funci贸n solo tengo que acceder al notebook de las funciones y no buscar en todo el notebook principal.
  • Me gusta mucho de Jesus que nos comparte las herramientas de su workflow que tiene como data scientist para facilitar el nuestro.

En resumen, para extender el funcionamiento de la API de Pandas:

  1. Crear un decorador con el accesorio para el acceso a los m茅todos
  2. Crear una clase
  3. Crear los m茅todos que se requieran en la clase

Nanana, panda de jjk. Ahora tienes toda mi atenci贸n.

Que grande el Pandas de Jujutsu xd

A opini贸n personal creo que es mejor usarlo sin la clase, uso los m茅todos de manera manual cuando los necesito (de paso practico el c贸digo, y si eres principiante es aun mejor, ya que repetir c贸digo y saber para que se usa cada cosa te ayudar谩 a futuro), me ahorro c贸digo y tiempo, no s茅. No le veo mucha utilidad, a menos de que lleves ya tiempo en esto, y est茅s cansado de repetir c贸digo y te lo sepas de memoria

Pandas es una biblioteca poderosa para el an谩lisis y manipulaci贸n de datos en Python, y ofrece muchas funcionalidades para trabajar con conjuntos de datos,

  • Extender la API de Pandas significa utilizar las funcionalidades avanzadas y personalizadas de Pandas para realizar operaciones m谩s espec铆ficas y complejas en tus conjuntos de datos.

la API de Pandas para realizar tareas m谩s avanzadas y personalizadas en tus conjuntos de datos. La versatilidad de Pandas te permite adaptar tus an谩lisis de datos de acuerdo con tus necesidades espec铆ficas. Puedes explorar a煤n m谩s las funciones y m茅todos avanzados de Pandas en la documentaci贸n oficial y a medida que adquieras experiencia en su uso.

Ojo:

Para quienes est谩n trabajando en Jupyter Notebook en VS Code y les marca error la 煤ltima funcion de la clase MissingMethods:

def missing_upsetplot(self, variables: list[str] = None, **kwargs):
	...

se trata de la version de Python, con 3.9 o mayor anda normal.

jajaja esa referencia a jujutsu kaisen

Muy buena clase. No sabia nada sobre esto, pero seguro que me va a ser muy util.

```python #python _3_11 _para Vcode SOLUCIONA EL %RUN asttokens==2.4.1 attrs==23.2.0 colorama==0.4.6 comm==0.2.2 contourpy==1.2.0 cycler==0.12.1 debugpy==1.8.1 decorator==5.1.1 executing==2.0.1 fastjsonschema==2.19.1 fonttools==4.50.0 ipykernel==6.29.3 ipython==8.22.2 jedi==0.19.1 jsonschema==4.21.1 jsonschema-specifications==2023.12.1 jupyter_client==8.6.1 jupyter_core==5.7.2 kiwisolver==1.4.5 matplotlib==3.8.3 matplotlib-inline==0.1.6 missingno==0.5.2 multipledispatch==1.0.0 natsort==8.4.0 nbformat==5.10.3 nest-asyncio==1.6.0 numpy==1.26.4 packaging==24.0 pandas==2.2.1 pandas-flavor==0.6.0 parso==0.8.3 pillow==10.2.0 platformdirs==4.2.0 prompt-toolkit==3.0.43 psutil==5.9.8 pure-eval==0.2.2 Pygments==2.17.2 pyjanitor==0.26.0 pyparsing==3.1.2 pyreadr==0.5.0 python-dateutil==2.9.0.post0 pytz==2024.1 pywin32==306 pyzmq==25.1.2 referencing==0.34.0 rpds-py==0.18.0 scipy==1.12.0 seaborn==0.13.2 session_info==1.0.0 six==1.16.0 stack-data==0.6.3 stdlib-list==0.10.0 tornado==6.4 traitlets==5.14.2 tzdata==2024.1 UpSetPlot==0.9.0 wcwidth==0.2.13 wget==3.2 xarray==2024.2.0 ```
Para visual code les recomiendo : Data Wrangler (Preview) es excelente funciona con pandas d谩ndole la visual del deepnote y se puede visualizar los csv mejor.

Hola! Encontr茅 un error en el m茅todo missing_case_summary(). Este m茅todo en esencia calcula el valor absoluto y relativo de nulos en cada fila:

def missing_case_summary(self) -> pd.DataFrame:
        return self._obj.assign(
            case=lambda df: df.index,
            n_missing=lambda df: df.apply(
                axis="columns", func=lambda row: row.isna().sum()
            ),
            pct_missing=lambda df: df["n_missing"] / df.shape[1] * 100,
        )[["case", "n_missing", "pct_missing"]]

El problema sucede cuando calculamos el porcentaje de missings

pct_missing=lambda df: df["n_missing"] / df.shape[1] * 100

Hemos creado 2 columnas de m谩s!!! Las cuales son casey n_missing por lo que este porcentaje est谩 subestimado. Por ejemplo. Si la fila fuese [None, 1, None, 0] El porcentaje de nulos es 50% pero este error de c贸digo arrojar铆a un porcentaje de 2 / 6 33%

La soluci贸n a este bug es restar 2 al denominador:

pct_missing=lambda df: df["n_missing"] / (df.shape[1]-2) * 100,
A opini贸n personal creo que es mejor usarlo sin la clase, uso los m茅todos de manera manual cuando los necesito (de paso practico el c贸digo), me ahorro c贸digo y tiempo, no s茅. No le veo mucha utilidad

Tuve el siguiente error cuando ejecutaba la siguinete sentencia: df.missing.number_missing(),驴por qu茅?, manejo un mismo notebook y posiblemente como exist铆a una anterior creaci贸n del objeto MissingMethod el notebook buscaba a ese objeto anterior y no al .ipyng externo, de manera que para poder ejecutarlo correctamente deb铆a asegurarme que solo exista una referencia a MissingMethods.

Muy buena clase

Wow. Increible Clase! Ahora hay muchas mas posibilidades en Pandas!