JMP19 – Warnung zur Veraltung des Dataframe Interchange ProtocolDa ich das in letzter Zeit in meinen JSL-Logs gesehen habe, frage ich mich, ob jmp19 auf etwas anderes umgestellt hat? Das wird ja irgendwann wegfallen. Ich habe in jmp18 eine benutzerdefinierte Funktion verwendet, um eine jmp-Tabelle in einen Pandas-DataFrame zu konvertieren, aber das hat in jmp19 nicht funktioniert. Wie kann ich das jetzt erreichen?
Ich führe meinen Python-Code innerhalb des JSL-Skripts aus.
Python Send(o28k_raw);<BR />Python Submit(<BR />raw_data = pd.api.interchange.from_dataframe(o28k_raw)<BR />);
Diese Warnung:
: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
Automatisierung und SkripterstellungDatenzusammenführung und -bereinigungBetreff: JMP19 – Warnung zur Veraltung des Dataframe Interchange ProtocolHaben Sie schon den Artikel „Weiterführende Python-Kenntnisse in JMP 19 – JMP-Benutzergemeinschaft“ gesehen?
Die Arbeit mit Pandas Dataframes wurde in JMP 19 durch die neue Funktion jmp.from_dataframe() vereinfacht.
Betreff: JMP19 – Warnung zur Veraltung des Dataframe Interchange ProtocolIch habe den unten genannten Code unter demselben Link gefunden, aber die Abfrage ist, wie bereits erwähnt, anders.
pd.api.interchange.from_dataframe()
Betreff: JMP19 – Warnung zur Veraltung des Dataframe Interchange ProtocolInteressant, wenn ich das folgende Python-Skript ausführe, erhalte ich keine Warnungen:
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)
Könnten Sie bitte überprüfen, ob der Fehler beim Ausführen des Python-Codes innerhalb des Python-Editors von JMP auftritt oder ob er spezifisch für die Ausführung von Python mit der Funktion „Python Submit“ ist?
Ich habe auch Folgendes versucht, und dabei ist kein Fehler aufgetreten:
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);
Könnten Sie diese Skripte testen, um zu sehen, ob sie bei Ihnen ebenfalls dieselbe Warnung ausgeben?
Betreff: JMP19 – Warnung zur Veraltung des Dataframe Interchange ProtocolDiese Warnung erscheint sowohl beim Ausführen von Python-Code über Python Submit als auch beim Ausführen des Python-Skripts im Python-Editor von 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
Betreff: JMP19 – Warnung zur Veraltung des Dataframe Interchange ProtocolDanke für die Antwort. Der obige Python-Codeausschnitt stammt aus dem Skriptindex und läuft daher normalerweise problemlos.
Falls Sie nicht die neueste Version von JMP (19.1.2) verwenden, empfiehlt sich ein Update. Sollten Sie bereits die neueste Version installiert haben, wenden Sie sich bitte an den technischen Support von JMP unter support@jmp.com .
Betreff: JMP19 – Warnung zur Veraltung des Dataframe Interchange ProtocolDie Warnung kommt von pandas selbst.
Wir haben intern Aktualisierungen vorgenommen, um die PyCapsule-Schnittstelle zu nutzen. Der genaue Veröffentlichungstermin hängt von den Stabilitätstests ab. Dadurch werden auch die Funktion `jmp.from_arrow()` und die Erweiterung des `jmp.DataTable`-Objekts hinzugefügt, um die Anforderungen der Arrow-Schnittstelle zu erfüllen. Die Funktion `jmp.from_dataframe()` wurde intern überarbeitet, um die neue Funktionalität zu nutzen.
import pandas as pd
dt = jmp.open(jmp.SAMPLE_DATA + "Big Class.jmp")
pandas_df = pd.DataFrame.from_arrow(dt)
print(pandas_df)
Betreff: JMP19 – Warnung zur Veraltung des Dataframe Interchange ProtocolDie Warnung gilt für Pandas Version 3.0 und höher.
Betreff: JMP19 – Warnung zur Veraltung des Dataframe Interchange ProtocolVielen Dank für die Klarstellung.
Meinem Verständnis nach stammt die aktuelle Warnung bezüglich der veralteten Funktionen von Pandas und nicht von JMP, und zukünftige JMP-Versionen werden die Arrow/PyCapsule-Schnittstelle direkt unterstützen, wodurch Arbeitsabläufe wie die folgenden ermöglicht werden:
dt = jmp.open(...)
pandas_df = pd.DataFrame.from_arrow(dt)
ohne auf das DataFrame Interchange Protocol zurückzugreifen.
In der Zwischenzeit versuche ich, den besten Ansatz für die Wartung von Produktionsskripten zu ermitteln, die auf verschiedenen JMP-Versionen eingesetzt werden.
In JMP 18 habe ich früher eine benutzerdefinierte Konvertierungsfunktion verwendet:
def jmp_to_pandas(jmp_table):
data = {}
for col in jmp_table:
data[col.name] = list(col)
return pd.DataFrame(data)
Nach dem Umstieg auf JMP 19 bin ich zu Folgendem gewechselt:
<SPAN>pd.api.interchange.from_dataframe(...)</SPAN>
Das funktioniert zwar, erzeugt aber jetzt die Pandas-Veraltungswarnung.
Würden Sie empfehlen, die Interchange-API weiterhin zu verwenden, bis die Arrow-Unterstützung verfügbar ist und ich das produktiv eingesetzte Skript überarbeiten muss, oder würden Sie vorschlagen, für den Produktionscode, der über Pandas- und JMP-Versionsaktualisierungen hinweg stabil bleiben muss, auf eine benutzerdefinierte DataTable-zu-DataFrame-Konvertierung zurückzugreifen?
Wird es auch bei der bevorstehenden Arrow-Implementierung so weitergehen?<SPAN>Pyarrow</SPAN>Wird es eine notwendige Abhängigkeit sein, oder wird die Arrow-Schnittstelle über JMP zugänglich gemacht, ohne dass Benutzer zusätzliche Pakete installieren müssen?
Vielen Dank für die zusätzlichen Erläuterungen.
Betreff: JMP19 – Warnung zur Veraltung des Dataframe Interchange ProtocolGenerell empfehlen wir, aufgrund der besseren Performance weiterhin die moderneren Methoden zur DataFrame-Konvertierung, wie beispielsweise das Interchange-Protokoll, zu verwenden. Falls Skripte zwingend Zugriff auf die Konsolenausgabe benötigen, kann das Unterdrücken der Warnung hilfreich sein, wird aber generell nicht empfohlen.
import warnings
warnings.simplefilter(action='ignore', category=DeprecationWarning)
Hinsichtlich der Stabilität ist diese Veraltung mit Pandas4Warning gekennzeichnet, was bedeutet, dass diese Warnungen in pandas 4.0 durchgesetzt werden (siehe Aktualisierte Veraltungsrichtlinie ). Erfahrungsgemäß veröffentlicht pandas etwa alle drei Jahre eine Hauptversion, wobei (meines Wissens) kein voraussichtliches Veröffentlichungsdatum angegeben wurde. Wir sind weiterhin zuversichtlich, dass die Arrow PyCapsule-Schnittstelle in JMP ab pandas 4.0 verfügbar sein wird.
Ohne Kenntnis der spezifischen JMP/Pandas-Versionen, auf denen der Workflow basiert, könnte eine benutzerdefinierte DataTable-Konvertierung für den Anwendungsfall weiterhin besser geeignet sein. Es sei außerdem darauf hingewiesen, dass `jmp.from_dataframe_using_csv` ebenfalls verfügbar ist und sich mit den Hauptversionen von Pandas (getestet mit 2.3.3 vs. 3.0.0) nicht wesentlich verändert hat. Diese Funktion ist in JMP 19 verfügbar und wird auch in JMP 20 weiterhin verfügbar sein.
In der aktuellen Implementierung ruft `jmp.from_dataframe()` intern die Arrow-PyCapsule-Schnittstelle ( `jmp.from_arrow` ) auf, wenn es mit einem `pandas.DataFrame` aufgerufen wird, um die Abwärtskompatibilität zu gewährleisten. Daher sind keine Anpassungen am Skript selbst erforderlich. Zu Ihrer nächsten Frage: Pandas benötigt PyArrow als Abhängigkeit für die Verwendung dieser Methoden. Sie müssen daher möglicherweise Ihre Ausführungsumgebung überprüfen und PyArrow installieren. Unseres Wissens ist dies spezifisch für Pandas, da Polars die zusätzliche PyArrow-Abhängigkeit nicht benötigt.
Gerne beantworten wir weitere Fragen zu Python oder DataFrame-Konvertierungen. Zögern Sie also nicht, uns jederzeit zu fragen.