Problème lors de l'envoi d'un DataFrame Pandas de Python vers une table de données JMP 18Contexte:
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.
Exemple de ce que j'essaie :
</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">
Problème observé :
-
dt_merged is created but contains no data. [mais le cadre de données est généré car je peux l'enregistrer au format csv et l'utiliser]
-
Using global in Python does not seem to fix the issue.
-
Python Get() does not appear to recognize the pandas DataFrame correctly.
Ce que je veux:
-
Convertissez un DataFrame pandas en une table JMP à partir de Python.
-
Accédez-y en JSL avec un nom approprié, affichez la fenêtre et manipulez les colonnes.
-
Évitez de créer des tableaux vides et conservez toutes les lignes/colonnes.
Solutions potentielles que j'envisage :
-
Exporter vers CSV depuis Python puis importer vers JMP - essayé et fonctionne, mais c'est quelque chose que je ne veux pas.
-
Ensuring the DataFrame is declared global before Python Get(). - n'a pas fonctionné
Environnement:
-
JMP 18
-
Python 3.x (intégré)
- Utilisation dans un script JSL
Tout conseil ou exemple pratique d'envoi de DataFrames pandas vers JMP depuis Python serait grandement apprécié !
Automatisation et scriptsAnalyse et modélisation des données de baseAccès aux donnéesFusion et nettoyage des donnéesExploration et visualisation des donnéesObjet : Problème lors de l'envoi d'un DataFrame Pandas de Python vers une table de données JMP 18Consultez l'exemple « Création d'un DataFrame Pandas en parcourant les colonnes d'une table de données » dans Guide de script > Python > Création d'un DataFrame Pandas à partir d'une table de données JMP . Je pense également qu'avec JMP19, il est plus facile de convertir un DataFrame Python en DataTable JMP sans fichier CSV intermédiaire (liste de souhaits JMP), mais je n'ai pas encore essayé en raison de nombreux problèmes avec JMP19.
Objet : Problème lors de l'envoi d'un DataFrame Pandas de Python vers une table de données JMP 18Votre dt_merged contient des données, il ne contient pas de vue.
utiliser
dt_merged << Nouvelle vue de données ;
au lieu de
dt_merged << Afficher la fenêtre ;
La table existe mais n'a pas encore de fenêtre associée.
Notez également que dans JMP 18, Python Get(df) utilise dataframe -> CSV -> data_table en interne, tout comme dans JMP 14-17. Seule la table de données JMP a un accès direct aux données au-delà des limites JMP/Python.
Dans JMP 19, la situation est bien meilleure. JMP prend en charge le protocole Portable DataFrame (PDTF) : une ligne de code suffit pour passer d'un DT JMP à un DataFrame pandas, puis une autre ligne pour passer d'un DataFrame à une DataTable. Cela fonctionne avec tout package de type DataFrame prenant en charge le protocole DataFrame, et la conversion s'effectue en mémoire.
L'autre option consiste à créer la table de données fusionnée en Python à l'aide des API jmp.DataTable et à parcourir les colonnes du dataframe pour créer des colonnes JMP une par une dans la nouvelle table. Il semble que les tables contiennent des données temporelles. Il est important de vérifier que les données sont correctes. Dans JMP 14-18, vous devez effectuer un marshaling entre la représentation temporelle des données de JMP et celle de Python. La date d'époque de JMP est le 1er janvier 1904 (identique à celle d'Excel sur Mac), tandis que celle de Python est le 1er janvier 1970.
JMP 19 regroupe correctement les valeurs datetime au-delà des limites JSL/Python.
Il existe des exemples dans la section « Python » de l'index des scripts, pour le package d'importation saut .
Je recommande vivement la mise à jour vers JMP 19. JMP 18 a marqué une étape fondamentale dans l'intégration de Python dans JMP. Bien que la prise en charge de JMP 18 n'ait pas été aussi complète que nous l'aurions souhaité, elle offrait tellement de fonctionnalités que nous ne souhaitions pas attendre JMP 19.
Objet : Problème lors de l'envoi d'un DataFrame Pandas de Python vers une table de données JMP 18Je tiens également à souligner que l'objet jmp.DataTable est itérable, vous pouvez donc utiliser directement jmp_table dans votre boucle for. Il se comporte déjà comme une liste de colonnes.
def jmp_to_pandas(jmp_table):
data_dict = {}
for col in jmp_table:
data_dict[col.name] = list(col)
return pd.DataFrame(data_dict)
Objet : Problème lors de l'envoi d'un DataFrame Pandas de Python vers une table de données JMP 18J'ai observé que les dates dans mon dataframe sont assez bizarres, veuillez vous référer à la capture d'écran. il s'agit d'un format de date et seuls quelques-uns sont affectés, la date et l'heure ne semblent pas être affectées.
Objet : Problème lors de l'envoi d'un DataFrame Pandas de Python vers une table de données JMP 18Il s'agit de la date en secondes. Vous pouvez afficher n'importe quel nombre comme date en modifiant les paramètres de la colonne :

Objet : Problème lors de l'envoi d'un DataFrame Pandas de Python vers une table de données JMP 18Hé, merci ! J'ai compris, mais je travaille avec du JSL et du Python entre les deux. Existe-t-il une meilleure façon de gérer cela directement dans le code ?
1 - processus en Python utilisant le décalage horaire d'époque
2- réaffecter le format de colonne à chaque colonne dans le code jsl. [fastidieux]
Objet : Problème lors de l'envoi d'un DataFrame Pandas de Python vers une table de données JMP 18- Horodatage Unix vers la date et l'heure réelles
<BR />:col << Format( "yyyy-mm-dd" );
Objet : Problème lors de l'envoi d'un DataFrame Pandas de Python vers une table de données JMP 18La capture d'écran était un exemple, j'ai des centaines de colonnes:\ , avec un formatage incohérent dans les données sources. Merci, au fait.
Objet : Problème lors de l'envoi d'un DataFrame Pandas de Python vers une table de données JMP 18JMP19 ?
Objet : Problème lors de l'envoi d'un DataFrame Pandas de Python vers une table de données JMP 18JMP 18, l'organisation ne migre pas vers JMP 19. Je ne sais pas s'il s'agit d'une version de test ou d'une application développée. Je suppose qu'il s'agira d'une version ultérieure.
Objet : Problème lors de l'envoi d'un DataFrame Pandas de Python vers une table de données JMP 18Peut-être attendre JMP19.1 pour récupérer certaines fonctionnalités manquantes : Secrets non documentés
en plus de cela :
l'une des raisons de passer à JMP19 : from_dataframe()
Aller plus loin avec Python dans JMP 19
une autre raison : de merveilleuses améliorations dans la grille de données comme les balises de colonnes et les vues de filtre.
Organisation et filtrage des données dans la table de données JMP 19
Avez-vous la possibilité d'installer JMP19 "manuellement" sur un système de test ?
Objet : Problème lors de l'envoi d'un DataFrame Pandas de Python vers une table de données JMP 18Oui, je peux le faire. Je ne l'ai pas encore fait. Une autre raison pour laquelle je ne l'utilise pas est la compatibilité des scripts, car d'autres utilisateurs continueraient à utiliser JMP18. Je rencontre déjà de nombreux problèmes avec le référencement de tables et les jointures.
Objet : Problème lors de l'envoi d'un DataFrame Pandas de Python vers une table de données JMP 18
@zetaVagabond1 a écrit :
Je suis déjà confronté à de nombreux problèmes avec le référencement de table et les jointures.
Problèmes avec JMP18 par rapport à JMP17 ?
Re: Problème d'envoi d'un DataFrame Pandas depuis Python vers une table de données JMP 18JMP utilise l'époque du 1er janvier 1904 pour le temps 0 en secondes (date d'époque d'Excel sur Mac).
Python utilise la date standard UNIX du 1er janvier 1970 pour l'instant 0 en secondes.
JMP 19 gère correctement les valeurs de date et d'heure entre les frontières JSL et Python.
JMP 19 possède une fonction dt = jmp.from_dataframe(df) qui créera une table de dates directement à partir du dataframe en mémoire.
Dans JMP 18, la seule option en mémoire consiste à construire soi-même les colonnes, en parcourant les colonnes pandas et en faisant attention à la conversion date/heure.
Vous pouvez aussi utiliser un fichier CSV. C'était la méthode employée dans JMP 14 à 17. Attention cependant : de légères différences binaires peuvent apparaître lors de la conversion binaire → CSV → binaire. Des exemples illustrant la procédure CSV sont disponibles dans le répertoire SAMPLE_SCRIPTS/Python de JMP 18. Il s'agit simplement d'enregistrer les données au format CSV avec pandas, puis d'ouvrir ce fichier CSV avec JMP.
Je vous recommande vivement de passer à la version 19. Des améliorations considérables ont été apportées à la gestion des tables de données dans la version 19.
Re: Problème d'envoi d'un DataFrame Pandas depuis Python vers une table de données JMP 18Rory Vaden : Comment multiplier son temps ?
https://www.youtube.com/watch?v=y2X7c9TUQJ8

Voici un conseil : attendez aujourd’hui que votre service informatique passe à JMP19 – et pourquoi ne pas investir un peu d’efforts pour les convaincre ?
Vous pourrez alors écrire et utiliser du code de qualité dès demain.
L'alternative est de commencer dès aujourd'hui à écrire du code qui est déjà obsolète.
Python avec JMP19 :
- facile à coder
- mince
- beaucoup plus rapide