JMP19 - Advertencia sobre la obsolescencia del protocolo de intercambio de dataframesAl ver esto en mis registros JSL recientemente, ¿se habrá adaptado jmp19 a algo diferente? Esto eventualmente se eliminará. Usé una función personalizada para convertir una tabla jmp a un dataframe de pandas en jmp18, pero no funcionó en jmp19. Entonces, ¿cuáles son las formas de lograr lo mismo ahora?
Ejecuto mi código Python dentro del script JSL.
Python Send(o28k_raw);<BR />Python Submit(<BR />raw_data = pd.api.interchange.from_dataframe(o28k_raw)<BR />);
Esta advertencia:
:18: Pandas4Warning: The Dataframe Interchange Protocol is deprecated.
For dataframe-agnostic code, you may want to look into:
- Arrow PyCapsule Interface: https://arrow.apache.org/docs/format/CDataInterface/PyCapsuleInterface.html
- Narwhals: https://github.com/narwhals-dev/narwhals
Automatización y secuencias de comandosCombinación y limpieza de datosRe: JMP19 - Advertencia sobre la obsolescencia del protocolo de intercambio de dataframes¿Has visto el artículo "Avanzando con Python en JMP 19" de la comunidad de usuarios de JMP ?
Trabajar con DataFrames de Pandas se simplificó en JMP 19 gracias a la nueva función jmp.from_dataframe().
Re: JMP19 - Advertencia sobre la obsolescencia del protocolo de intercambio de dataframesEncontré el código mencionado a continuación en el mismo enlace, pero la consulta es diferente a la que ya mencioné.
pd.api.interchange.from_dataframe()
Re: JMP19 - Advertencia sobre la obsolescencia del protocolo de intercambio de dataframesCuriosamente, cuando ejecuto el siguiente script de Python no veo ninguna advertencia:
import jmp
import pandas as pd
dt = jmp.open(jmp.SAMPLE_DATA + "Big Class.jmp")
pandas_df = (pd.api.interchange.from_dataframe(dt))
print(pandas_df)
¿Podrías comprobar si el error se produce al ejecutar Python desde el editor de Python de JMP, o si es específico de Python ejecutado mediante Python Submit?
También probé lo siguiente y no me dio ningún error:
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
Python Send( dt );
Python Submit( "pandas_df = (pd.api.interchange.from_dataframe(dt))" );
Python Submit( "dt2 = jmp.from_dataframe(pandas_df)" );
Python Get(dt2);
¿Podrías probar estos scripts para ver si también te dan la misma advertencia?
Re: JMP19 - Advertencia sobre la obsolescencia del protocolo de intercambio de dataframesVeo esta advertencia cuando ejecuto Python usando Python Submit, así como cuando ejecuto el script de Python desde el editor de Python de JMP.
pandas_df = (pd.api.interchange.from_dataframe(dt))
/*:
<STRING>
:1: Pandas4Warning: The Dataframe Interchange Protocol is deprecated. For dataframe-agnostic code, you may want to look into: - Arrow PyCapsule Interface: https://arrow.apache.org/docs/format/CDataInterface/PyCapsuleInterface.html - Narwhals: https://github.com/narwhals-dev/narwhals
</STRING>
//:*/
import jmp
import pandas as pd
dt = jmp.open(jmp.SAMPLE_DATA + "Big Class.jmp")
pandas_df = (pd.api.interchange.from_dataframe(dt))
print(pandas_df)
/*:
:5: Pandas4Warning: The Dataframe Interchange Protocol is deprecated.
For dataframe-agnostic code, you may want to look into:
- Arrow PyCapsule Interface: https://arrow.apache.org/docs/format/CDataInterface/PyCapsuleInterface.html
- Narwhals: https://github.com/narwhals-dev/narwhals
Re: JMP19 - Advertencia sobre la obsolescencia del protocolo de intercambio de dataframesGracias por la respuesta. El fragmento de código Python anterior proviene del índice de scripts, por lo que normalmente se ejecuta sin problemas.
Si no está utilizando la última versión de JMP (19.1.2), le recomendamos actualizarla e intentarlo de nuevo. Si ya tiene la última versión, le sugiero que se ponga en contacto con el soporte técnico de JMP en support@jmp.com .
Re: JMP19 - Advertencia sobre la obsolescencia del protocolo de intercambio de dataframesLa advertencia proviene del propio panda.
Hemos realizado las actualizaciones internas para utilizar la interfaz PyCapsule. La fecha exacta de lanzamiento dependerá de las pruebas para garantizar su estabilidad. Esto también añadirá la función jmp.from_arrow() y la extensión del objeto jmp.DataTable para dar soporte a los requisitos de la interfaz Arrow. La función jmp.from_dataframe() se ha rediseñado internamente para aprovechar la nueva funcionalidad.
import pandas as pd
dt = jmp.open(jmp.SAMPLE_DATA + "Big Class.jmp")
pandas_df = pd.DataFrame.from_arrow(dt)
print(pandas_df)
Re: JMP19 - Advertencia sobre la obsolescencia del protocolo de intercambio de dataframesLa advertencia aparece con pandas 3.0 y versiones posteriores.
Re: JMP19 - Advertencia sobre la obsolescencia del protocolo de intercambio de dataframesGracias por la aclaración.
Entiendo que la advertencia de obsolescencia actual proviene de Pandas y no de JMP, y que las futuras versiones de JMP admitirán la interfaz Arrow/PyCapsule directamente, lo que permitirá flujos de trabajo como:
dt = jmp.open(...)
pandas_df = pd.DataFrame.from_arrow(dt)
sin depender del Protocolo de Intercambio de DataFrames.
Mientras tanto, estoy tratando de determinar el mejor enfoque para mantener los scripts de producción que se implementan en diferentes versiones de JMP.
Históricamente, en JMP 18, me basaba en una función de conversión personalizada:
def jmp_to_pandas(jmp_table):
data = {}
for col in jmp_table:
data[col.name] = list(col)
return pd.DataFrame(data)
Después de pasar a JMP 19, cambié a:
<SPAN>pd.api.interchange.from_dataframe(...)</SPAN>
lo cual funciona, pero ahora genera la advertencia de obsolescencia de Pandas.
¿Recomendaría continuar usando la API de intercambio hasta que se lance la compatibilidad con Arrow y tenga que revisar el script implementado en producción, o sugeriría volver a una conversión personalizada de DataTable a DataFrame para el código de producción que necesita permanecer estable entre las actualizaciones de versiones de Pandas y JMP?
Además, para la próxima implementación de Arrow, se<SPAN>flecha pyarrow</SPAN>¿Será una dependencia obligatoria, o la interfaz de Arrow estará disponible a través de JMP sin que los usuarios tengan que instalar paquetes adicionales?
Gracias por el contexto adicional.
Re: JMP19 - Advertencia sobre la obsolescencia del protocolo de intercambio de dataframesEn general, recomendamos seguir utilizando los métodos más modernos de conversión de DataFrames, como el protocolo de intercambio, debido a sus ventajas en cuanto a rendimiento. Si los scripts requieren específicamente acceso a la salida de la consola, suprimir la advertencia puede ser útil, pero generalmente no se recomienda.
import warnings
warnings.simplefilter(action='ignore', category=DeprecationWarning)
En términos de estabilidad, esta obsolescencia está marcada como Pandas4Warning, lo que significa que estas advertencias se aplicarán en pandas 4.0 (véase la política de obsolescencia actualizada ). Históricamente, pandas ha tenido una versión principal aproximadamente cada 3 años, aunque (que yo sepa) no han indicado la fecha estimada de lanzamiento. Seguimos confiando en que la interfaz Arrow PyCapsule estará disponible en JMP para pandas 4.0.
Sin conocer las versiones específicas de JMP/pandas que utiliza el flujo de trabajo, una conversión personalizada a DataTable podría ser más adecuada para este caso de uso. Cabe destacar que la función jmp.from_dataframe_using_csv también está disponible y no ha mostrado diferencias significativas con la versión principal de pandas (probado con la versión 2.3.3 frente a la 3.0.0). Esta función está disponible en JMP 19 y seguirá estándolo en JMP 20.
En la implementación actual, `jmp.from_dataframe()` llama internamente a la interfaz `Arrow PyCapsule` ( `jmp.from_arrow` ) cuando se llama con un `pandas.DataFrame` para facilitar la retrocompatibilidad, por lo que no debería ser necesario realizar ningún ajuste en el script. Sin embargo, en respuesta a su siguiente pregunta, `pandas` requiere `pyarrow` como dependencia para usar estos métodos, por lo que es posible que deba revisar el entorno de ejecución para instalarlo. Por lo que sabemos, esto parece ser más específico de `pandas`, ya que `polars` no requiere la dependencia adicional de `pyarrow`.
Estaremos encantados de aclarar o responder cualquier otra pregunta que pueda tener sobre Python o las conversiones de DataFrames, así que no dude en preguntar cuando quiera.