JMP19 - Avertissement de dépréciation du protocole d'échange de trames de donnéesJ'ai récemment constaté ce problème dans mes logs JSL : jmp19 utilise-t-il une autre méthode ? Cette fonctionnalité sera progressivement abandonnée. J'utilisais une fonction personnalisée pour convertir un tableau jmp en dataframe pandas avec jmp18, mais cela ne fonctionne plus avec jmp19. Quelles sont donc les solutions pour obtenir le même résultat ?
J'exécute mon code Python à l'intérieur du script JSL.
Python Send(o28k_raw);<BR />Python Submit(<BR />raw_data = pd.api.interchange.from_dataframe(o28k_raw)<BR />);
Cet avertissement :
: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
Automatisation et scriptageFusion et nettoyage des donnéesRe: JMP19 - Avertissement de dépréciation du protocole d'échange de dataframesAvez-vous consulté « Aller plus loin avec Python dans JMP 19 » - Communauté des utilisateurs de JMP ?
Travailler avec des DataFrames Pandas est devenu plus facile dans JMP 19, grâce à la nouvelle fonction jmp.from_dataframe().
Re: JMP19 - Avertissement de dépréciation du protocole d'échange de dataframesJ'ai trouvé le code mentionné ci-dessous sur le même lien, mais la requête est différente comme je l'ai indiqué.
pd.api.interchange.from_dataframe()
Re: JMP19 - Avertissement de dépréciation du protocole d'échange de dataframesC'est intéressant, lorsque j'exécute le script Python suivant, je ne vois aucun avertissement :
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)
Pourriez-vous vérifier si l'erreur se produit lors de l'exécution du code Python depuis l'éditeur Python de JMP, ou si elle est spécifique à l'exécution du code Python via la commande Python Submit ?
J'ai également essayé la méthode suivante, sans rencontrer d'erreur :
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);
Pourriez-vous tester ces scripts pour voir s'ils génèrent également le même avertissement de votre côté ?
Re: JMP19 - Avertissement de dépréciation du protocole d'échange de dataframesJe vois cet avertissement lorsque j'exécute le script Python via la commande `python submit`, ainsi que lorsque je l'exécute depuis l'éditeur 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 - Avertissement de dépréciation du protocole d'échange de dataframesMerci pour votre réponse. L'extrait de code Python ci-dessus provient de l'index des scripts ; il s'exécute donc généralement sans problème.
Si vous n'utilisez pas la dernière version de JMP (19.1.2), il serait judicieux de la mettre à jour et de réessayer. Si vous utilisez déjà la dernière version, je vous recommande de contacter l'assistance technique de JMP à l'adresse support@jmp.com .
Re: JMP19 - Avertissement de dépréciation du protocole d'échange de dataframesL'avertissement vient des pandas eux-mêmes.
Nous avons effectué les mises à jour en interne pour utiliser l'interface PyCapsule. La date de déploiement précise dépendra des tests effectués afin de garantir la stabilité. Cette mise à jour ajoutera également la fonction `jmp.from_arrow()` et étendra l'objet `jmp.DataTable` pour répondre aux exigences de l'interface Arrow. La fonction `jmp.from_dataframe()` a été retravaillée en interne pour intégrer ces nouvelles fonctionnalités.
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 - Avertissement de dépréciation du protocole d'échange de dataframesCet avertissement apparaît avec pandas 3.0 et versions ultérieures.
Re: JMP19 - Avertissement de dépréciation du protocole d'échange de dataframesMerci pour ces précisions.
Si je comprends bien, l'avertissement de dépréciation actuel provient de Pandas et non de JMP, et les futures versions de JMP prendront directement en charge l'interface Arrow/PyCapsule, permettant ainsi des flux de travail tels que :
dt = jmp.open(...)
pandas_df = pd.DataFrame.from_arrow(dt)
sans avoir recours au protocole d'échange de DataFrames.
En attendant, j'essaie de déterminer la meilleure approche pour maintenir les scripts de production déployés sur différentes versions de JMP.
Historiquement, dans JMP 18, j'utilisais une fonction de conversion personnalisée :
def jmp_to_pandas(jmp_table):
data = {}
for col in jmp_table:
data[col.name] = list(col)
return pd.DataFrame(data)
Après être passé à JMP 19, j'ai opté pour :
<SPAN>pd.api.interchange.from_dataframe(...)</SPAN>
qui fonctionne mais génère maintenant l'avertissement de dépréciation de Pandas.
Me recommanderiez-vous de continuer à utiliser l'API d'échange jusqu'à ce que la prise en charge d'Arrow soit disponible et que je doive revoir le script déployé en production, ou me suggéreriez-vous de revenir à une conversion personnalisée de DataTable en DataFrame pour le code de production qui doit rester stable malgré les mises à jour de versions de Pandas et JMP ?
De plus, pour la prochaine implémentation d'Arrow,<SPAN>pyarrow</SPAN>L'interface Arrow sera-t-elle une dépendance requise ou sera-t-elle exposée via JMP sans que les utilisateurs aient à installer de packages supplémentaires ?
Merci pour ces précisions.
Re: JMP19 - Avertissement de dépréciation du protocole d'échange de dataframesDe manière générale, nous recommandons de continuer à utiliser les méthodes de conversion de DataFrame les plus modernes, comme le protocole d'échange, en raison de leurs performances supérieures. Si des scripts nécessitent spécifiquement l'accès à la sortie console, la suppression de l'avertissement peut s'avérer utile, mais n'est généralement pas recommandée.
import warnings
warnings.simplefilter(action='ignore', category=DeprecationWarning)
En termes de stabilité, cette obsolescence est signalée comme Pandas4Warning, ce qui signifie que ces avertissements seront appliqués dans pandas 4.0 (voir la politique d'obsolescence mise à jour ). Historiquement, pandas a bénéficié d'une mise à jour majeure environ tous les 3 ans, bien qu'aucune date de sortie estimée n'ait été communiquée (à ma connaissance). Nous restons confiants quant à la disponibilité de l'interface Arrow PyCapsule dans JMP avec pandas 4.0.
Sans connaître les versions précises de JMP/pandas utilisées par le flux de travail, une conversion personnalisée de DataTable pourrait s'avérer plus adaptée. Il convient également de noter que la fonction `jmp.from_dataframe_using_csv` est disponible et n'a pas subi de différence significative avec les versions majeures de pandas (testé avec les versions 2.3.3 et 3.0.0). Cette fonction est disponible dans JMP 19 et le restera dans JMP 20.
Dans l'implémentation actuelle, la méthode `jmp.from_dataframe()` appelle en interne l'interface Arrow PyCapsule (` jmp.from_arrow` ) lorsqu'elle est utilisée avec un `pandas.DataFrame` afin d'assurer la rétrocompatibilité. Par conséquent, aucune modification du script lui-même ne devrait être nécessaire. Cependant, pour répondre à votre question suivante, pandas requiert pyarrow comme dépendance pour l'utilisation de ces méthodes. Il vous faudra donc peut-être vérifier votre environnement d'exécution pour installer pyarrow. À notre connaissance, ce problème semble spécifique à pandas, car polars ne requiert pas cette dépendance supplémentaire.
Nous serions ravis de clarifier ou de répondre à toutes vos questions concernant Python ou les conversions de DataFrame, alors n'hésitez pas à les poser à tout moment.