JMP19 - データフレーム交換プロトコルの非推奨に関する警告最近、JSL Logsでこれを見かけたのですが、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 19 で Python をさらに活用する方法 - JMP ユーザーコミュニティの記事をご覧になりましたか?
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 - データフレーム交換プロトコルの非推奨に関する警告ご説明いただきありがとうございます。
私の理解では、現在の非推奨警告はJMPではなくPandasに起因するものであり、将来のJMPリリースではArrow/PyCapsuleインターフェースが直接サポートされ、次のようなワークフローが可能になる予定です。
dt = jmp.open(...)
pandas_df = pd.DataFrame.from_arrow(dt)
DataFrame Interchange Protocolに頼ることなく。
その間、私は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の非推奨警告を生成するようになった。
Arrowのサポートがリリースされ、本番環境にデプロイされたスクリプトを見直す必要が生じるまで、引き続きインターチェンジAPIを使用することをお勧めしますか?それとも、PandasとJMPのバージョンアップに関わらず安定性を維持する必要のある本番コードについては、カスタムのDataTableからDataFrameへの変換に戻すことをお勧めしますか?
また、今後のArrowの実装では、<SPAN>ピヤロウ</SPAN>必須の依存関係となるのか、それともユーザーが追加パッケージをインストールする必要なく、JMPを通じてArrowインターフェースが公開されるのか?
追加情報ありがとうございます。
件名: JMP19 - データフレーム交換プロトコルの非推奨に関する警告一般的には、パフォーマンス上の利点から、インターチェンジプロトコルなどのより新しいデータフレーム変換方法を引き続き使用することをお勧めします。スクリプトがコンソール出力へのアクセスを特に必要とする場合は、警告を抑制することが役立つ場合もありますが、通常は推奨されません。
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でも引き続き利用可能です。
現在の実装では、 jmp.from_dataframe()は pandas.DataFrame で呼び出された場合、後方互換性を維持するために内部的に Arrow PyCapsule インターフェース ( jmp.from_arrow ) を呼び出すため、スクリプト自体を変更する必要はありません。ただし、次の質問についてですが、これらのメソッドを使用する際に pandas は pyarrow を必須の依存関係としているため、実行環境を見直して pyarrow をインストールする必要があるかもしれません。私たちの知る限り、これは pandas 特有の問題のようで、polars は追加の pyarrow 依存関係を必要としません。
Pythonやデータフレームの変換に関してご不明な点やご質問がございましたら、いつでもお気軽にお問い合わせください。喜んでご説明させていただきます。