Problema nell'invio di Pandas DataFrame da Python alla tabella dati JMP 18Contesto:
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.
Esempio di ciò che sto provando:
</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 osservato:
-
dt_merged is created but contains no data. [ma il data frame viene generato perché posso salvarlo in csv e utilizzarlo]
-
Using global in Python does not seem to fix the issue.
-
Python Get() does not appear to recognize the pandas DataFrame correctly.
Ciò che voglio:
-
Converti un DataFrame pandas in una tabella JMP da Python.
-
Accedervi in JSL con il nome corretto, mostrare la finestra e manipolare le colonne.
-
Evitare di creare tabelle vuote e mantenere tutte le righe/colonne.
Possibili soluzioni che sto prendendo in considerazione:
-
Esportare in CSV da Python e poi importare in JMP: provato e funziona, ma è qualcosa che non voglio.
-
Ensuring the DataFrame is declared global before Python Get(). - non ha funzionato
Ambiente:
-
JMP 18
-
Python 3.x (incorporato)
- Utilizzo all'interno di uno script JSL
Saranno molto apprezzati eventuali consigli o esempi pratici su come inviare i DataFrame pandas da Python a JMP!
Automazione e scriptingAnalisi e modellazione dei dati di baseAccesso ai datiCombinazione e pulizia dei datiEsplorazione e visualizzazione dei datiRe: Problema nell'invio di Pandas DataFrame da Python alla tabella dati JMP 18Dai un'occhiata all'esempio "Creazione di un DataFrame Pandas tramite un ciclo tra le colonne di una tabella dati" da Scripting Guide > Python > Creazione di un DataFrame Pandas da una tabella dati JMP . Inoltre, penso che in JMP19 sia più semplice convertire un DataFrame Python in una tabella dati JMP senza un file CSV intermedio (JMP Wish List), ma non l'ho ancora provato a causa di troppi problemi con JMP19.
Re: Problema nell'invio di Pandas DataFrame da Python alla tabella dati JMP 18Il tuo dt_merged contiene dati, non contiene una vista.
utilizzo
dt_merged << Nuova vista dati ;
invece di
dt_merged << Mostra finestra;
La tabella esiste ma non ha ancora una finestra associata.
Si noti inoltre che in JMP 18 Python Get( df ) utilizza internamente dataframe -> CSV -> data_table, proprio come in JMP 14-17. Solo la tabella dati JMP ha accesso in tempo reale ai dati oltre i confini JMP / Python.
In JMP 19 la situazione è molto migliore. JMP supporta il protocollo Portable Dataframe e basta una riga di codice per passare da un dt JMP a un DataFrame pandas e un'altra riga per convertire il DataFrame in una DataTable. Questo funziona per qualsiasi pacchetto di tipo dataframe che supporti il protocollo DataFrame e la conversione avviene in memoria.
L'altra opzione è creare la tabella dati unita in Python utilizzando le API jmp.DataTable e scorrere le colonne del dataframe creando le colonne JMP una alla volta nella nuova tabella dati. Sembra che i dati temporali facciano parte delle tabelle. Questo garantisce la correttezza dei dati. In JMP 14-18 è necessario effettuare il marshalling tra la rappresentazione temporale dei dati di JMP e quella dei dati di Python. La data di epoca per JMP è il 1° gennaio 1904 (come quella di Excel su Mac), mentre la data di epoca di Python è il 1° gennaio 1970.
JMP 19 esegue correttamente il marshalling dei valori datetime attraverso i confini JSL/Python.
Nella sezione "Python" dell'indice degli script sono presenti degli esempi per il pacchetto jmp import.
Consiglio vivamente di passare a JMP 19. JMP 18 ha rappresentato una modifica fondamentale per l'integrazione di Python in JMP. Sebbene il supporto di JMP 18 non fosse completo come avremmo voluto, offriva così tante funzionalità che non volevamo aspettare JMP 19.
Re: Problema nell'invio di Pandas DataFrame da Python alla tabella dati JMP 18Vorrei anche sottolineare che l'oggetto jmp.DataTable è iterabile, quindi puoi usare direttamente jmp_table nel tuo ciclo for. Si comporta già come un elenco di colonne.
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 nell'invio di Pandas DataFrame da Python alla tabella dati JMP 18Ho notato che le date nel mio dataframe sono piuttosto bizzarre, fate riferimento allo screenshot. Questo è il formato della data e solo pochi sono interessati, la data e l'ora non sembrano esserlo.
Re: Problema nell'invio di Pandas DataFrame da Python alla tabella dati JMP 18Questa è la data in secondi. Puoi visualizzare qualsiasi numero come data modificando le impostazioni della colonna:

Re: Problema nell'invio di Pandas DataFrame da Python alla tabella dati JMP 18Ciao, grazie, ho capito, ma sto lavorando con codice JSL e Python. C'è un modo migliore per gestire questo problema direttamente nel codice?
1 - processo in python utilizzando l'offset temporale dell'epoca
2- riassegnare il formato della colonna a ciascuna colonna nel codice jsl. [noioso]
Re: Problema nell'invio di Pandas DataFrame da Python alla tabella dati JMP 18- Timestamp Unix in data e ora reali
<BR />:col << Format( "yyyy-mm-dd" );
Re: Problema nell'invio di Pandas DataFrame da Python alla tabella dati JMP 18Lo screenshot era un esempio, ho centinaia di colonne:\ , con formattazione incoerente nei dati di origine. Grazie comunque
Re: Problema nell'invio di Pandas DataFrame da Python alla tabella dati JMP 18JMP19?
Re: Problema nell'invio di Pandas DataFrame da Python alla tabella dati JMP 18JMP 18, l'organizzazione non migra a JMP19. Non sono sicuro se si tratti di una versione di prova o di un'applicazione sviluppata. Immagino che si tratti di una versione successiva.
Re: Problema nell'invio di Pandas DataFrame da Python alla tabella dati JMP 18Forse aspetta che JMP19.1 recuperi alcune funzionalità mancanti: Segreti non documentati
oltre a ciò:
uno dei motivi per passare a JMP19: from_dataframe()
Approfondimenti su Python in JMP 19
un altro motivo: straordinari miglioramenti nella griglia dati, come i tag di colonna e le visualizzazioni dei filtri.
Organizzazione e filtraggio dei dati nella tabella dati JMP 19
Hai la possibilità di installare JMP19 "manualmente" su un sistema di prova?
Re: Problema nell'invio di Pandas DataFrame da Python alla tabella dati JMP 18Sì, posso farlo. Non l'ho ancora fatto. Un altro motivo per cui non lo uso è la compatibilità con gli script, dato che altri utenti continuerebbero a usare JMP18. Sto già riscontrando parecchi problemi con i riferimenti alle tabelle e i join.
Re: Problema nell'invio di Pandas DataFrame da Python alla tabella dati JMP 18
@zetaVagabond1 ha scritto:
Sto già riscontrando parecchi problemi con i riferimenti alle tabelle e con le unioni.
Problemi con JMP18 rispetto a JMP17?
Re: Problema nell'invio di Pandas DataFrame da Python alla tabella dati JMP 18JMP utilizza un'epoca del 1° gennaio 1904 per il tempo 0 in secondi (data dell'epoca di Mac Excel)
Python utilizza la data standard UNIX del 1° gennaio 1970 per l'ora 0 in secondi.
JMP 19 gestisce correttamente i valori di data e ora tra i confini JSL/Python.
JMP 19 ha un dt = jmp.from_dataframe(df) che creerà una tabella di date direttamente dal data frame in memoria.
In JMP 18 l'unica scelta in memoria è quella di creare autonomamente le colonne, eseguendo un ciclo sulle colonne pandas e prestando attenzione alla conversione di data/ora.
In alternativa, è possibile utilizzare il formato CSV. È così che veniva fatto in JMP 14-17. Tuttavia, è possibile ottenere piccole differenze binarie nei valori numerici passando da binario a CSV. Nella directory SAMPLE_SCRIPTS/Python di JMP 18 sono presenti degli esempi che mostrano come utilizzare il formato CSV. In pratica, basta dire a pandas di salvare in formato CSV, quindi a JMP di aprire il file CSV.
Ti consiglio vivamente di passare alla versione 19. Nella versione 19 sono stati apportati notevoli miglioramenti alla gestione delle tabelle dati.
Re: Problema nell'invio di Pandas DataFrame da Python alla tabella dati JMP 18Rory Vaden: Come moltiplicare il tuo tempo?
Italiano: https://www.youtube.com/watch?v=y2X7c9TUQJ8

Ecco: aspetta oggi che il tuo reparto IT passi a JMP19, magari impegnandoti un po' per convincerli.
Così potrai scrivere e utilizzare un codice fantastico domani.
L'alternativa è iniziare oggi a scrivere codice che oggi è già obsoleto.
Python con JMP19:
- facile da codificare
- sottile
- molto più veloce