Übergeben Sie eine JMP-Datentabelle als Pandas-Datenrahmen an PythonIn früheren Versionen von JMP (vor JMP 18) war es standardmäßig ein Pandas-Datenrahmen, wenn Sie eine JMP-Datentabelle an Python übergaben (sehr nett). Leider scheint diese Funktion in JMP 18 weggefallen zu sein. Nachdem Sie die Datentabelle mit PythonSend() an Python übergeben haben, müssen Sie dann jede Spalte durchlaufen und sie in ein Numpy-Array umwandeln, indem Sie etwa Folgendes tun:
df = pd.DataFrame()
for i in range( len(cols) ):
df[ cols[i].name ] = np.array( cols[i] )
Und das ist bei großen Datentabellen zeitaufwändig. Ich habe dieses negative Feedback von einem Kunden (NVIDIA) erhalten, der JMP und Python intensiv nutzt.
Gibt es eine Möglichkeit, Datentabellen als Pandas-Datenrahmen an Python zu übergeben, ohne diese Konvertierung durchführen zu müssen? Oder noch besser: Können wir die JMP 17-Funktionalität von PythonSend() zurückbringen, die dies standardmäßig tut?
Danke,
Markieren
Betreff: Übergeben Sie eine JMP-Datentabelle als Pandas-Datenrahmen an PythonIn JMP 18 gibt es folgende Möglichkeit, dies zu tun
import pandas as pd
import jmp
# open the JMP data table
tablepath=<PATHNAME string="">dt=jmp.open(tablepath) # Sie können auch dt=jmp.current() oder dt=jmp.table(<'tablename'>) verwenden. # Definieren Sie eine Funktion zum Konvertieren einer JMP-Tabelle in einen Pandas-Datenrahmen. def jmpTableToDataFrame(dt): # Erstellen Sie direkt aus einer JMP-DataTable einen Pandas-Datenrahmen. df = pd.DataFrame() für idx im Bereich (Länge (dt)): drucken (dt[idx].name), wenn dt[idx].dtype == jmp.DataType.Numeric: # erstellt eine numerische Spalte direkt unter Verwendung des Pufferprotokolls von Python col = np.array(dt[idx]) df[dt[idx].name] = col.tolist() # machen Sie daraus eine Liste für Pandas. elif dt[idx].dtype == jmp.DataType.Character: # Erstellen Sie eine Liste, indem Sie durch die Werte iterieren col = list() für i im Bereich (dt.nrows): col.append(dt[idx][i]) # Erstellen Sie eine Zeichenspalte aus der Liste df[ dt[idx].name ] = col sonst: print( dt[idx].dtype ) return df #Konvertieren Sie die JMP-Tabelle in einen Pandas-Datenrahmen df = jmpTableToDataFrame(dt); print(df)</PATHNAME>
Betreff: Übergeben Sie eine JMP-Datentabelle als Pandas-Datenrahmen an PythonIch möchte nur darauf hinweisen, dass das Durchlaufen der Spalten um Größenordnungen schneller ist als das Verhalten von JMP 17. Dies alles geschieht im Speicher. JMP 14-17 schreibt eine JMP-Datentabelle als temporäre CSV-Datei auf die Festplatte, bevor die Datei von Pandas als CSV-Datei wieder eingelesen wird. Ein Kunde hatte eine 200 MB große .jmp-Datei, die während des 15-minütigen Übertragungsvorgangs auf 3 GB CSV anwuchs. Bei der alten Methode konnte auch die Genauigkeit der Daten verloren gehen, da Binärdaten in Text und dann Text wieder in Binärdaten umgewandelt werden.
Wenn Sie wirklich die alte Methode verwenden möchten, ist sie in SAMPLE_SCRIPTS/Python/dt2pandas.py als Funktion to_pandas(dt) enthalten. Nimmt ein jmp.DataTable-Objekt auf und gibt einen pandas.DataFrame zurück.
Wir werden Python Send(dt) nicht standardmäßig so einrichten, dass es einen pandas.DataFrame sendet. Das jmp.DataTable-Objekt gibt Python-Code die Möglichkeit, JMP-Datentabellen live aus Python heraus zu bearbeiten und zu verarbeiten, was bei Pandas nicht möglich ist.
Das wird die größte Änderung sein, an die sich Benutzer anpassen müssen, die Python von JMP 14-17 verwendet haben. Aber im schlimmsten Fall ist es eine zusätzliche Importanweisung „import dt2pandas and pd = to_pandas(dt)“ im Code nach dem Senden, wenn Sie es auf die alte Weise machen möchten. Oder packen Sie den Code, der die Spalten durchläuft, in eine Funktion und rufen Sie diese auf, um aus dem jmp.DataTable-Objekt einen Pandas-Datenrahmen im Speicher zu erstellen.
Betreff: Übergeben Sie eine JMP-Datentabelle als Pandas-Datenrahmen an PythonSiehe auch meinen Blogbeitrag.
https://community.jmp.com/t5/JMPer-Cable/Neu in JMP-18-Python-jmp-DataTable-and-pandas-DataFrame/ba-p/744680
Betreff: Übergeben Sie eine JMP-Datentabelle als Pandas-Datenrahmen an PythonDanke für die tolle Erklärung, Paul! Ich glaube nicht, dass der Benutzer den Leistungsunterschied bemerkt hat, sondern nur den Unterschied im Verhalten von PythonSend() bemerkt hat. Wenn dieses Thema aufkommt (und das wird es), ist es wichtig, auf diese Leistungsverbesserung hinzuweisen, damit sie als Funktion und nicht als Fehler wahrgenommen wird. Ich werde Ihren tollen Blogbeitrag zu diesem Thema mit Nvidia teilen.
Betreff: Übergeben Sie eine JMP-Datentabelle als Pandas-Datenrahmen an PythonHallo Sam/Paul,
Gilt die von Ihnen freigegebene Funktion als die beste bekannte Methode zum Konvertieren von JMP-Datentabellen in Pandas-Datenrahmen? Dies ist etwas, das von jedem JMP-/Python-Benutzer universell verwendet wird. So sehr, dass ich denke, es rechtfertigt die Aufnahme in die JMP-Python-Bibliothek?