將 Pandas DataFrame 從 Python 傳送到 JMP 18 資料表的問題情境:
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.
我正在嘗試的範例:
</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">
觀察到的問題:
-
dt_merged is created but contains no data. [但資料框已生成,因為我可以將其儲存為 csv 並使用它]
-
Using global in Python does not seem to fix the issue.
-
Python Get() does not appear to recognize the pandas DataFrame correctly.
我想要的是:
我正在考慮的潛在解決方案:
環境:
-
JMP 18
-
Python 3.x(嵌入式)
- 在 JSL 腳本中使用
非常感謝任何將 pandas DataFrames 從 Python 發送回 JMP 的指導或工作範例!
自動化和腳本基本資料分析與建模資料存取資料混合與清理數據探索與視覺化回覆:將 Pandas DataFrame 從 Python 傳送到 JMP 18 資料表的問題請查看「腳本指南 > Python > 從 JMP 資料表建立 Pandas 資料表」中的「透過循環遍歷資料表列建立 Pandas 資料表」範例。另外,我認為在 JMP19 中,將Python 資料表轉換為 JMP 資料表更容易,無需中間 csv 檔案(JMP 願望清單),但由於 JMP19 存在太多問題,我還沒有嘗試過。
回覆:將 Pandas DataFrame 從 Python 傳送到 JMP 18 資料表的問題您的 dt_merged 確實包含數據,但不包含視圖。
使用
dt_merged <<新資料視圖;
而不是
dt_merged << 顯示視窗;
該表存在但尚無關聯視窗。
另請注意,在 JMP 18 中,Python Get( df ) 內部確實使用了 dataframe -> CSV CSV -> data_table 的轉換方式,就像 JMP 14-17 中那樣。只有 JMP 資料表可以跨 JMP/Python 邊界即時存取資料。
在 JMP 19 中,情況要好得多。 JMP 支援可移植 Dataframe 協議,只需一行程式碼即可從 JMP dt => pandas DataFrame 轉換,再用一行程式碼即可將 DataFrame 轉換為 DataTable。這適用於任何支援 DataFrame 協議的 DataFrame 類別包,並且轉換過程在記憶體中進行。
您的另一個選擇是使用 jmp.DataTable API 在 Python 中建立合併資料表,並遍歷資料框列,在新資料表中逐一建立 JMP 列。看起來您的表格中包含時間資料。這需要注意確保正確。在 JMP 14-18 中,您必須在 JMP 的資料時間表示和 Python 的資料時間表示之間進行編組。 JMP 的紀元日期是 1904 年 1 月 1 日(與 Mac 上的 Excel 相同),而 Python 的紀元日期是 1970 年 1 月 1 日。
JMP 19 正確地跨 JSL / Python 邊界編組日期時間值。
腳本索引的「Python」部分中有跳轉導入套件的範例。
我強烈建議更新到 JMP 19。 JMP 18 對 JMP 中的 Python 整合進行了根本性的改進。雖然 JMP 18 的支援不如我們期望的那麼全面,但它提供瞭如此豐富的功能,我們不想等到 JMP 19 才升級。
回覆:將 Pandas DataFrame 從 Python 傳送到 JMP 18 資料表的問題我還想指出的是,jmp.DataTable 物件是可迭代的,因此你可以在 for 迴圈中直接使用 jmp_table。它的行為已經類似於列的列表了。
def jmp_to_pandas(jmp_table):
data_dict = {}
for col in jmp_table:
data_dict[col.name] = list(col)
return pd.DataFrame(data_dict)
回覆:將 Pandas DataFrame 從 Python 傳送到 JMP 18 資料表的問題我確實觀察到我的資料框中的日期非常奇怪,請參考螢幕截圖。這是日期格式,只有少數受到影響,日期時間似乎不受影響。
回覆:將 Pandas DataFrame 從 Python 傳送到 JMP 18 資料表的問題這是以秒為單位的日期。您可以透過更改列設定將任何數字顯示為日期:

回覆:將 Pandas DataFrame 從 Python 傳送到 JMP 18 資料表的問題嘿,謝謝,我已經解決了這個問題,但我正在使用 JSL 和 Python 程式碼。有沒有更好的方法在程式碼本身解決這個問題?
1 - 使用紀元時間偏移的 Python 進程
2- 將列格式重新指派給 jsl 程式碼中的每一列。 [繁瑣]
回覆:關於從 Python 向 JMP 18 資料表發送 Pandas DataFrame 的問題- Unix 時間戳轉換為實際日期和時間
<BR />:col << Format( "yyyy-mm-dd" );
回覆:將 Pandas DataFrame 從 Python 傳送到 JMP 18 資料表的問題截圖是一個例子,我有 100 多列:\,來源資料格式不一致。順便說一句,謝謝
回覆:將 Pandas DataFrame 從 Python 傳送到 JMP 18 資料表的問題JMP19?
回覆:將 Pandas DataFrame 從 Python 傳送到 JMP 18 資料表的問題JMP 18 org 無法遷移到 JMP19,我不確定這是測試版本還是已開發的應用程式。我懷疑是後續版本。
回覆:關於從 Python 向 JMP 18 資料表發送 Pandas DataFrame 的問題或許可以等 JMP19.1 版本發布,屆時一些缺少的功能將會恢復: 未公開的金鑰。
除此之外:
切換到 JMP19 的原因之一: from_dataframe()
在 JMP 19 中進一步使用 Python
另一個原因是:資料網格的出色改進,例如列標籤和篩選視圖。
在 JMP 19 數據表中組織和篩選數據
您有機會在測試系統上「手動」安裝 JMP19 嗎?
回覆:關於從 Python 向 JMP 18 資料表發送 Pandas DataFrame 的問題是的,我可以做到。但我還沒這麼做。我不使用它的另一個原因是腳本相容性問題,因為其他使用者還會繼續使用 JMP18。我已經遇到了很多表引用和連接方面的問題。
回覆:關於從 Python 向 JMP 18 資料表發送 Pandas DataFrame 的問題
@zetaVagabond1寫道:
我目前在表格引用和連接方面已經遇到了不少問題。
JMP18 與 JMP17 相比有哪些問題?
回覆:關於從 Python 向 JMP 18 資料表發送 Pandas DataFrame 的問題JMP 使用 1904 年 1 月 1 日的紀元作為時間 0(以秒為單位)(Mac Excel 紀元日期)。
Python 使用標準的 UNIX 1970 年 1 月 1 日紀元日期作為時間 0 秒。
JMP 19 能夠正確地跨越 JSL / Python 邊界對日期時間值進行序列化。
JMP 19 有一個 dt = jmp.from_dataframe(df) 函數,可以直接從記憶體中的資料框建立日期表。
在 JMP 18 中,唯一的記憶體選擇是自己建立列,循環遍歷 pandas 列並注意日期/時間轉換。
或者,您也可以使用 CSV 檔案。 JMP 14-17 就是這麼做的。但請注意,二進位資料 -> CSV -> 二進位的轉換過程中,數值可能會出現細微的二進位差異。 JMP 18 的 SAMPLE_SCRIPTS/Python 目錄中有一些範例,展示如何使用 CSV 檔案。簡而言之,就是告訴 pandas 將資料儲存為 CSV 文件,然後告訴 JMP 要開啟該 CSV 檔案。
我強烈建議您升級到 19 版本。 19 版本在資料表處理方面進行了重大改進。
回覆:關於從 Python 向 JMP 18 資料表發送 Pandas DataFrame 的問題羅裡·瓦登:如何倍增你的時間?
https://www.youtube.com/watch?v=y2X7c9TUQJ8

現在就等著你們的IT部門切換到JMP19吧——或許可以花點時間說服他們。
明天你就可以寫和使用一些很棒的程式碼了。
另一個選擇是今天就開始編寫今天就已經過時的程式碼。
Python 與 JMP19:
易於編碼
- 苗條的
速度快得多