PROGRAMACIÓN EN PITÓN
Cómo inspeccionar marcos de datos de Pandas en operaciones encadenadas sin dividir la cadena en declaraciones separadas
La depuración se encuentra en el corazón de la programación. Escribí sobre esto en el siguiente artículo:
Esta afirmación es bastante general e independiente del lenguaje y del marco. Cuando usa Python para el análisis de datos, necesita depurar el código independientemente de si está realizando un análisis de datos complejo, escribiendo un producto de software ML o creando una aplicación Streamlit o Django.
Este artículo analiza la depuración de código Pandas, o más bien un escenario específico de depuración de código Pandas en el que las operaciones se encadenan en una tubería. Esta depuración plantea un desafío. Cuando no se sabe cómo hacerlo, las operaciones Pandas encadenadas parecen ser mucho más difíciles de depurar que el código Pandas normal, es decir, las operaciones Pandas individuales que utilizan la asignación típica entre corchetes.
Para depurar el código Pandas normal usando la asignación típica entre corchetes, es suficiente agregar un punto de interrupción de Python y usar el pdb
Depurador interactivo. Esto sería algo como esto:
>>> d = pd.DataFrame(dict(
... x=[1, 2, 2, 3, 4],
... y=[.2, .34, 2.3, .11, .101],
... group=["a", "a", "b", "b", "b"]
.. ))
>>> d["xy"] = d.x + d.y
>>> breakpoint()
>>> d = d[d.group == "a"]
Desafortunadamente, no puedes hacer eso cuando el código consta de operaciones encadenadas, como aquí:
>>> d = d.assign(xy=lambda df: df.x + df.y).query("group == 'a'")
o, según tu preferencia, aquí:
>>> d = d.assign(xy=d.x + d.y).query("group == 'a'")
En este caso, no hay lugar para detenerse y mirar el código; solo puede hacerlo antes o después de la cadena. Así, una de las soluciones es dividir la cadena principal en dos subcadenas (dos tuberías) en un…