將 JMP 資料表作為 Pandas 資料框傳遞給 Python在 JMP 的早期版本(JMP 18 之前)中,當您將 JMP 資料表傳遞給 Python 時,預設情況下它是 Pandas 資料框(非常好)。不幸的是,該功能似乎已在 JMP 18 中被消除,在使用 PythonSend() 將資料表傳遞給 Python 後,您需要循環遍歷每一列並轉換為 Numpy 數組,執行以下操作:
df = pd.DataFrame()
for i in range( len(cols) ):
df[ cols[i].name ] = np.array( cols[i] )
對於大型數據表來說,這非常耗時。我收到了一位大量使用 JMP 和 Python 的客戶 (NVIDIA) 的負面回饋。
有沒有一種方法可以將資料表作為 Pandas 資料框架傳遞給 Python,而無需進行此轉換?或者更好的是,我們能否恢復 PythonSend() 的 JMP 17 功能(預設會執行此操作)?
謝謝,
標記
回覆:將 JMP 資料表作為 Pandas 資料框傳遞給 Python在 JMP 18 中,這是一種方法
import pandas as pd
import jmp
# open the JMP data table
tablepath=<PATHNAME string="">dt=jmp.open(tablepath) # 您也可以使用 dt=jmp.current() 或 dt=jmp.table(<'tablename'>) # 定義函數將 JMP 表轉換為 pandas 資料幀 def jmpTableToDataFrame(dt) : # 直接從JMP 資料表建立Pandas 資料框。 df = pd.DataFrame() for idx in range( len(dt) :(</img> print(dt[idx].name) if dt[idx].dtype == jmp.DataType.Numeric: # 使用Python的Buffer直接建立數字列Protocol col = np.array( dt[idx] ) df[ dt[idx].name ] = col.tolist() # 使其成為 pandas 的列表。 elif dt[idx].dtype == jmp.DataType.Character: # 透過迭代值建立清單 col = list() for i in range ( dt.nrows :(</img> col.append(dt[idx][i]) # 從列表中建構字元列df[ dt[idx].name ] = col else: print( dt[idx].dtype ) return df #將JMP 表轉換為pandas 資料幀df = jmpTableToDataFrame(dt);列印(df)</PATHNAME>
回覆:將 JMP 資料表作為 Pandas 資料框傳遞給 Python我只想指出循環列的速度比 JMP 17 的行為快幾個數量級。這一切都發生在記憶體中。 JMP 14-17 將 JMP 資料表作為臨時 CSV 檔案寫入磁碟,然後從 pandas 將檔案讀回作為 CSV 檔案。一位客戶的 200M .jmp 檔案在傳輸過程中膨脹為 3G CSV,耗時 15 分鐘。舊方法也可能會丟失資料精度,因為它將二進制轉換為文本,然後將文本轉換回二進制。
如果您確實想使用舊方法,它會作為函數 to_pandas(dt) 包含在 SAMPLE_SCRIPTS/Python/dt2pandas.py 中。接收 jmp.DataTable 物件並傳回 pandas.DataFrame。
我們不會將 Python Send(dt) 設定為預設發送 pandas.DataFrame。 jmp.DataTable 物件讓 Python 程式碼能夠從 Python 即時操作和處理 JMP 資料表,而 pandas 則不能。
這將是使用 JMP 14-17 的 Python 的使用者需要適應的最大變化。但最壞的情況是,如果您想以舊方式執行此操作,則在發送後的程式碼中會增加 1 個額外的導入語句import dt2pandas和 pd = to_pandas(dt) 。或者等效地將在列上循環的程式碼包裝在函數中,並呼叫該函數以從 jmp.DataTable 物件在記憶體中建立 pandas 資料幀。
回覆:將 JMP 資料表作為 Pandas 資料框傳遞給 Python另請參閱我的部落格文章。
https://community.jmp.com/t5/JMPer-Cable/New-in-JMP-18-Python-jmp-DataTable-and-pandas-DataFrame/ba-p/744680
回覆:將 JMP 資料表作為 Pandas 資料框傳遞給 Python感謝保羅的精彩解釋!我認為用戶沒有註意到效能差異,而只是注意到 PythonSend() 行為的差異。當這個主題出現時(它會出現),重要的是要指出這項效能改進,以便將其視為一個功能而不是一個錯誤。我將與 Nvidia 分享您關於該主題的精彩部落格文章。
回覆:將 JMP 資料表作為 Pandas 資料框傳遞給 Python嗨薩姆/保羅,
您分享的這個函數是否被認為是將 JMP 資料表轉換為 Pandas 資料框的最著名方法?這是任何 JMP/Python 用戶都會普遍使用的東西。如此之多以至於我認為有必要將其包含在 JMP python 庫中?