Pasar una tabla de datos JMP a Python como marco de datos de PandasEn versiones anteriores de JMP (pre-JMP 18), cuando pasabas una tabla de datos JMP a Python, era un marco de datos Pandas de forma predeterminada (muy bueno). Desafortunadamente, parece que esa característica se eliminó en JMP 18, donde después de pasar la tabla de datos a Python con PythonSend(), debe recorrer cada columna y convertirla en una matriz Numpy haciendo algo como esto:
df = pd.DataFrame()
for i in range( len(cols) ):
df[ cols[i].name ] = np.array( cols[i] )
Y esto lleva mucho tiempo para tablas de datos grandes. Recibí este comentario negativo de un cliente (NVIDIA) que utiliza mucho JMP y Python.
¿Hay alguna manera de pasar tablas de datos a Python como un marco de datos de Pandas sin tener que realizar esta conversión? O mejor aún, ¿podemos recuperar la funcionalidad JMP 17 de PythonSend() que hace esto de forma predeterminada?
Gracias,
Marca
Re: Pasar una tabla de datos JMP a Python como un dataframe de PandasEn JMP 18, aquí hay una manera de hacerlo.
import pandas as pd
import jmp
# open the JMP data table
tablepath=<PATHNAME string="">dt=jmp.open(tablepath) # también puedes usar dt=jmp.current() o dt=jmp.table(<'tablename'>) # define la función para convertir la tabla JMP al marco de datos pandas def jmpTableToDataFrame(dt) : # Crear un marco de datos de Pandas directamente desde una tabla de datos JMP. df = pd.DataFrame() para idx en el rango (len(dt)): print(dt[idx].name) if dt[idx].dtype == jmp.DataType.Numeric: # crea una columna numérica directamente usando el búfer de Python Protocolo col = np.array( dt[idx] ) df[ dt[idx].name ] = col.tolist() # conviértalo en una lista para pandas. elif dt[idx].dtype == jmp.DataType.Character: # crea una lista iterando a través de los valores col = list() para i en el rango (dt.nrows): col.append(dt[idx][i]) # Crear columna de caracteres a partir de la lista df[ dt[idx].name ] = col else: print( dt[idx].dtype ) return df #convertir tabla JMP en marco de datos pandas df = jmpTableToDataFrame(dt); imprimir(df)</PATHNAME>
Re: Pasar una tabla de datos JMP a Python como un dataframe de PandasSolo quiero señalar que recorrer las columnas es mucho más rápido que el comportamiento de JMP 17. Todo esto sucede en la memoria. JMP 14-17 escribe una tabla de datos JMP en el disco como un archivo CSV temporal, antes de volver a leer el archivo desde pandas como un archivo CSV. Un cliente tenía un archivo .jmp de 200 millones que se disparó a 3G CSV en el proceso de transferencia que tardó 15 minutos. El método antiguo también tenía el potencial de perder la precisión de los datos, ya que convertía binario en texto y luego texto nuevamente en binario.
Si realmente desea utilizar el método anterior, está incluido en SAMPLE_SCRIPTS/Python/dt2pandas.py como una función to_pandas(dt). Tomando un objeto jmp.DataTable y devolviendo un pandas.DataFrame.
No haremos que Python Send(dt) envíe de forma predeterminada un pandas.DataFrame. El objeto jmp.DataTable le da al código Python la capacidad de manipular y manejar tablas de datos JMP en vivo desde Python, pandas no.
Ese será el cambio más grande al que tendrán que adaptarse los usuarios que utilizaban Python de JMP 14-17. Pero en el peor de los casos, es 1 declaración de importación adicional import dt2pandas y pd = to_pandas(dt) en el código después del envío, si desea hacerlo a la antigua usanza. O, de manera equivalente, envuelva el código en bucle en las columnas de una función y llámelo para crear un marco de datos de pandas en la memoria desde el objeto jmp.DataTable.
Re: Pasar una tabla de datos JMP a Python como un dataframe de PandasConsulte también la publicación de mi blog.
https://community.jmp.com/t5/JMPer-Cable/New-in-JMP-18-Python-jmp-DataTable-and-pandas-DataFrame/ba-p/744680
Re: Pasar una tabla de datos JMP a Python como un dataframe de Pandas¡Gracias por la gran explicación Pablo! No creo que el usuario haya prestado atención a la diferencia de rendimiento, sino que simplemente notó la diferencia en el comportamiento de PythonSend(). Cuando surja este tema (lo hará), es importante señalar esta mejora de rendimiento para que se perciba como una característica y no como un error. Compartiré tu excelente publicación de blog con Nvidia sobre el tema.
Re: Pasar una tabla de datos JMP a Python como un dataframe de PandasHola Sam/Paul,
¿Esta función que compartió se considera el método más conocido para convertir tablas de datos JMP en marcos de datos Pandas? Esto es algo que será utilizado universalmente por cualquier usuario de JMP/Python. ¿Tanto es así que creo que merece incluirlo en la biblioteca JMP de Python?