JMP19 - 資料幀交換協定棄用警告最近在我的 JSL 日誌中看到了這個,jmp19 是否已經進行了其他調整?這個功能最終會被淘汰。我之前在 jmp18 中使用自訂函數將 jmp 表格轉換為 pandas 資料幀,但這個方法在 jmp19 中不起作用。那麼,現在有什麼方法可以實現同樣的功能呢?
我在 JSL 腳本中運行我的 Python 程式碼。
Python Send(o28k_raw);<BR />Python Submit(<BR />raw_data = pd.api.interchange.from_dataframe(o28k_raw)<BR />);
此警告:
: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
自動化和腳本編寫資料融合與清理回覆:JMP19 - 資料幀交換協定棄用警告您是否看過JMP 使用者社群發布的「在 JMP 19 中進一步使用 Python」 ?
在 JMP 19 中,使用新函數jmp.from_dataframe() 可以更輕鬆地處理 Pandas 資料幀。
回覆:JMP19 - 資料幀交換協定棄用警告我從同一個連結中找到了下面提到的程式碼,但是查詢語句與我提到的有所不同。
pd.api.interchange.from_dataframe()
回覆:JMP19 - 資料幀交換協定棄用警告有趣的是,當我運行以下Python腳本時,沒有看到任何警告:
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)
請檢查一下,從 JMP 的 Python 編輯器執行 Python 時是否會出現此錯誤,還是只有使用 Python Submit 執行 Python 時才會出現此錯誤?
我還嘗試了以下操作,但沒有錯誤:
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);
您能否測試一下這些腳本,看看它們是否也會在您那邊發出相同的警告?
回覆:JMP19 - 資料幀交換協定棄用警告當我使用 Python Submit 執行 Python 程式碼時,以及從 JMP 的 Python 編輯器執行 Python 腳本時,都會看到此警告。
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
回覆:JMP19 - 資料幀交換協定棄用警告謝謝回覆。上面的 Python 程式碼片段來自腳本索引,所以通常運行沒有問題。
如果您目前使用的JMP版本不是最新版本(19.1.2),建議您更新後再試一次。如果您已經是最新版本,則建議您聯絡JMP技術支援(support@jmp.com )。
回覆:JMP19 - 資料幀交換協定棄用警告警告來自 pandas 本身。
我們已在內部完成更新,以使用 PyCapsule 介面。具體發佈時間將取決於穩定性測試結果。此次更新也將新增 jmp.from_arrow() 函數,並擴充 jmp.DataTable 物件以支援 Arrow 介面的要求。 jmp.from_dataframe() 函數也已在內部重構,以利用新功能。
import pandas as pd
dt = jmp.open(jmp.SAMPLE_DATA + "Big Class.jmp")
pandas_df = pd.DataFrame.from_arrow(dt)
print(pandas_df)
回覆:JMP19 - 資料幀交換協定棄用警告此警告在 pandas 3.0 及更高版本中出現。
回覆:JMP19 - 資料幀交換協定棄用警告謝謝你的解釋。
據我了解,目前的棄用警告源自 Pandas 而非 JMP,未來的 JMP 版本將直接支援 Arrow/PyCapsule 接口,從而支援以下工作流程:
dt = jmp.open(...)
pandas_df = pd.DataFrame.from_arrow(dt)
無需依賴資料幀交換協定。
同時,我正在嘗試確定維護跨 JMP 版本部署的生產腳本的最佳方法。
在 JMP 18 中,我一直以來都依賴自訂轉換函數:
def jmp_to_pandas(jmp_table):
data = {}
for col in jmp_table:
data[col.name] = list(col)
return pd.DataFrame(data)
升級到 JMP 19 後,我切換到了:
<SPAN>pd.api.interchange.from_dataframe(...)</SPAN>
雖然可以運行,但現在會產生 Pandas 棄用警告。
您的建議是繼續使用交換 API,直到 Arrow 支援發布,屆時我需要重新審視已部署的生產腳本,還是建議恢復使用自訂的 DataTable 到 DataFrame 轉換,以便生產程式碼能夠在 Pandas 和 JMP 版本更新中保持穩定?
此外,對於即將推出的 Arrow 實現,將會<SPAN>蓑蓑</SPAN>Arrow 介面是否是必需的依賴項,還是會透過 JMP 公開,而無需使用者安裝額外的軟體包?
感謝您提供的補充資訊。
回覆:JMP19 - 資料幀交換協定棄用警告通常情況下,我們建議繼續使用更現代的 DataFrame 轉換方法,例如交換協議,因為它們效能更佳。如果腳本確實需要存取控制台輸出,那麼抑制警告可能會有所幫助,但通常不建議這樣做:
import warnings
warnings.simplefilter(action='ignore', category=DeprecationWarning)
就穩定性而言,此棄用已標記為 Pandas4Warning,這意味著這些警告將在 pandas 4.0 中強制執行(請參閱更新後的棄用策略)。歷史上,pandas 大約每 3 年發布一次主要版本,但據我所知,他們並未公佈預計發布日期。我們仍然相信,Arrow PyCapsule 介面將在 pandas 4.0 中整合到 JMP 中。
在不了解工作流程所依賴的特定 JMP/pandas 版本的情況下,自訂 DataTable 轉換可能更適合此使用案例。此外,值得注意的是, `jmp.from_dataframe_using_csv` 函數也可用,並且在 pandas 的主要版本更新中(已使用 2.3.3 和 3.0.0 進行測試)沒有顯著差異。該函數在 JMP 19 中可用,並將繼續在 JMP 20 中可用。
就目前的實作而言,使用 pandas.DataFrame 呼叫`jmp.from_dataframe()`時,它會在內部呼叫 Arrow PyCapsule 介面( `jmp.from_arrow` )以保持向後相容性,因此腳本本身無需進行任何調整。但是,關於您的下一個問題,pandas 在使用這些方法時需要 pyarrow 作為依賴項,因此您可能需要重新檢查執行環境以安裝 pyarrow。據我們所知,這似乎是 pandas 特有的問題,因為 polars 不需要額外的 pyarrow 依賴項。
我們很樂意為您解答有關 Python 或 DataFrame 轉換的任何其他問題,請隨時提問。