Problema al enviar un DataFrame de Pandas desde Python a una tabla de datos JMP 18Contexto:
I am using JMP 18 with Python integration to merge multiple datasets. The merge and processing in Python works correctly using pandas, but when I try to send the final pandas DataFrame back to JMP using Python Get(), the resulting JMP Data Table is empty. I want to create a JMP table from my pandas DataFrame in Python and access it in JSL.
Ejemplo de lo que estoy intentando:
</CODE></STRONG></PRE>
<PRE>// Send JMP tables to Python
Python Send(jmp_table1);
Python Send(jmp_table2);
// Python processing
Python Submit("
import pandas as pd
def jmp_to_pandas(jmp_table):
cols = list(jmp_table)
data_dict = {}
for col in cols:
data_dict[col.name] = list(col)
return pd.DataFrame(data_dict)
# Convert JMP tables to pandas DataFrames
df1 = convert_jmp_to_pandas(jmp_table1)
df2 = convert_jmp_to_pandas(jmp_table2)
# Merge tables
merged_df = pd.merge_asof(df2, df1, left_on='Time', right_on='Time', direction='nearest')
");
// Attempt to bring merged DataFrame back to JMP
dt_merged = Python Get(merged_df);
dt_merged << Set Name("Merged_Data");
dt_merged << Show Window;
</PRE>
<PRE><STRONG data-start="638" data-end="669"><CODE class=" language-jsl">
Problema observado:
-
dt_merged is created but contains no data. [Pero el marco de datos se genera tal que puedo guardarlo en csv y usarlo]
-
Using global in Python does not seem to fix the issue.
-
Python Get() does not appear to recognize the pandas DataFrame correctly.
Lo que quiero:
-
Convierte un DataFrame de pandas en una tabla JMP desde Python.
-
Acceda a él en JSL con el nombre adecuado, muestre la ventana y manipule las columnas.
-
Evite crear tablas vacías y mantenga todas las filas/columnas.
Posibles soluciones que estoy considerando:
-
Exportar a CSV desde Python y luego importar a JMP: lo probé y funciona, pero es algo que no quiero.
-
Ensuring the DataFrame is declared global before Python Get(). - no funcionó
Ambiente:
-
JMP 18
-
Python 3.x (integrado)
- Uso dentro de un script JSL
¡Cualquier orientación o ejemplos prácticos sobre cómo enviar DataFrames de pandas a JMP desde Python serán muy apreciados!
Automatización y scriptingAnálisis y modelado de datos básicosAcceso a datosCombinación y limpieza de datosExploración y visualización de datosRe: Problema al enviar un DataFrame de Pandas desde Python a una tabla de datos JMP 18Consulta el ejemplo "Creación de un DataFrame de Pandas recorriendo las columnas de una tabla de datos" en la Guía de Scripting > Python > Creación de un DataFrame de Pandas a partir de una tabla de datos JMP . Además, creo que en JMP19 es más fácil convertir un DataFrame de Python a una tabla de datos JMP sin un archivo CSV intermedio (Lista de deseos de JMP) , pero aún no lo he probado debido a varios problemas con JMP19.
Re: Problema al enviar un DataFrame de Pandas desde Python a una tabla de datos JMP 18Su dt_merged contiene datos, no contiene una vista.
usar
dt_merged << Nueva vista de datos ;
en lugar de
dt_merged << Mostrar ventana;
La tabla existe pero aún no tiene una ventana asociada.
Tenga en cuenta también que en JMP 18, Python Get(df) utiliza internamente dataframe -> CSV CSV -> data_table, al igual que en JMP 14-17. Solo la tabla de datos de JMP tiene acceso en tiempo real a los datos entre JMP y Python.
En JMP 19, la situación es mucho mejor. JMP es compatible con el protocolo Portable DataFrame y solo se necesita una línea de código para convertir un dt de JMP a un DataFrame de Pandas y otra línea para convertir un DataFrame a una DataTable. Esto funciona con cualquier paquete tipo DataFrame compatible con el protocolo DataFrame y la conversión se realiza en memoria.
Su otra opción es crear la tabla de datos fusionada en Python usando las API jmp.DataTable y recorrer las columnas del marco de datos, creando columnas JMP una por una en la nueva tabla de datos. Parece que tiene datos de tiempo como parte de las tablas. Esto requiere atención para que sean correctos. En JMP 14-18, debe comparar la representación temporal de los datos de JMP con la de Python. La fecha de época de JMP es el 1 de enero de 1904 (igual que la de Excel en Mac), mientras que la de Python es el 1 de enero de 1970.
JMP 19 organiza adecuadamente los valores de fecha y hora en los límites de JSL/Python.
Hay ejemplos en la sección 'Python' del índice de scripts, para el paquete de importación saltar .
Recomiendo ampliamente actualizar a JMP 19. JMP 18 representó un cambio fundamental para la integración de Python en JMP. Si bien la compatibilidad con JMP 18 no fue tan completa como nos hubiera gustado, ofreció tantas capacidades que no quisimos esperar hasta JMP 19.
Re: Problema al enviar un DataFrame de Pandas desde Python a una tabla de datos JMP 18También quiero señalar que el objeto jmp.DataTable es iterable, por lo que puedes usar jmp_table directamente en tu bucle for. Ya funciona como una lista de columnas.
def jmp_to_pandas(jmp_table):
data_dict = {}
for col in jmp_table:
data_dict[col.name] = list(col)
return pd.DataFrame(data_dict)
Re: Problema al enviar un DataFrame de Pandas desde Python a una tabla de datos JMP 18Observé que las fechas en mi marco de datos son bastante extrañas, consulte la captura de pantalla. Este es el formato de fecha y solo unas pocas se ven afectadas, la fecha y la hora no parecen verse afectadas.
Re: Problema al enviar un DataFrame de Pandas desde Python a una tabla de datos JMP 18Esta es la fecha en segundos. Puede mostrar cualquier número como fecha cambiando la configuración de la columna:

Re: Problema al enviar un DataFrame de Pandas desde Python a una tabla de datos JMP 18Hola, gracias. Ya lo resolví, pero estoy trabajando con código JSL y Python. ¿Hay alguna mejor manera de solucionarlo en el código?
1 - Proceso en Python usando el desplazamiento de tiempo de época
2- Reasignar el formato de columna a cada columna en el código jsl. [tedioso]
Re: Problema al enviar un DataFrame de Pandas desde Python a una tabla de datos de JMP 18- Conversión de marca de tiempo Unix a fecha y hora reales
<BR />:col << Format( "yyyy-mm-dd" );
Re: Problema al enviar un DataFrame de Pandas desde Python a una tabla de datos JMP 18La captura de pantalla fue un ejemplo, tengo cientos de columnas.:\ , con un formato inconsistente en los datos fuente. Gracias, por cierto.
Re: Problema al enviar un DataFrame de Pandas desde Python a una tabla de datos JMP 18¿JMP19?
Re: Problema al enviar un DataFrame de Pandas desde Python a una tabla de datos de JMP 18JMP 18, la organización no está migrando a JMP 19. No estoy seguro de si se trata de una versión de prueba o de una aplicación desarrollada. Sospecho que es lo segundo.
Re: Problema al enviar un DataFrame de Pandas desde Python a una tabla de datos de JMP 18Quizás convenga esperar a JMP19.1 para recuperar algunas funciones que faltan: Secretos no documentados
Además de eso:
Una de las razones para cambiar a JMP19: from_dataframe()
Profundizando en Python en JMP 19
Otro motivo: las magníficas mejoras en la cuadrícula de datos, como las etiquetas de columna y las vistas de filtro.
Organización y filtrado de datos en la tabla de datos de JMP 19
¿Tiene la oportunidad de instalar JMP19 "manualmente" en un sistema de prueba?
Re: Problema al enviar un DataFrame de Pandas desde Python a una tabla de datos de JMP 18Sí, puedo hacerlo. No lo he hecho. Otra razón por la que no lo uso es la compatibilidad de scripts, ya que otros usuarios seguirían usando JMP18. Ya estoy teniendo bastantes problemas con las referencias a tablas y las uniones.
Re: Problema al enviar un DataFrame de Pandas desde Python a una tabla de datos de JMP 18
@zetaVagabond1 escribió:
Ya estoy teniendo bastantes problemas con las referencias a tablas y las uniones.
¿Problemas con JMP18 frente a JMP17?
Re: Problema al enviar un DataFrame de Pandas desde Python a una tabla de datos de JMP 18JMP utiliza la época del 1 de enero de 1904 para el tiempo 0 en segundos (fecha de época de Mac Excel).
Python utiliza la fecha estándar UNIX del 1 de enero de 1970 para el tiempo 0 en segundos.
JMP 19 serializa correctamente los valores de fecha y hora a través de los límites JSL/Python.
JMP 19 tiene un método dt = jmp.from_dataframe(df) que creará una tabla de fechas directamente a partir del marco de datos en memoria.
En JMP 18, la única opción en memoria es construir las columnas manualmente, iterando sobre las columnas de pandas y prestando atención a la conversión de fecha/hora.
Como alternativa, puedes usar un archivo CSV. Así se hacía en JMP 14-17. Ten en cuenta que pueden existir pequeñas diferencias binarias en los valores numéricos al convertir de binario a CSV y viceversa. En el directorio SAMPLE_SCRIPTS/Python de JMP 18 encontrarás ejemplos que muestran cómo usar un archivo CSV. Básicamente, debes indicarle a pandas que guarde el archivo como CSV y luego indicarle a JMP que lo abra.
Realmente te recomiendo que actualices a la versión 19. Se han realizado mejoras drásticas en el manejo de tablas de datos en la versión 19.
Re: Problema al enviar un DataFrame de Pandas desde Python a una tabla de datos de JMP 18Rory Vaden: ¿Cómo multiplicar tu tiempo?
https://www.youtube.com/watch?v=y2X7c9TUQJ8

Aquí: Espere hoy a que su departamento de TI cambie a JMP19; tal vez deba invertir algún esfuerzo para convencerlos.
Entonces mañana podrás escribir y usar un código excelente.
La alternativa es empezar hoy mismo a escribir código que ya está desactualizado.
Python con JMP19:
- fácil de codificar
- delgado
- mucho más rápido