PythonからJMP 18データテーブルにPandas DataFrameを送信する際の問題コンテクスト:
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.
私が欲しいもの:
-
Python から pandas DataFrame を JMP テーブルに変換します。
-
適切な名前を使用して JSL でアクセスし、ウィンドウを表示して列を操作します。
-
空のテーブルの作成を避け、すべての行/列を維持します。
私が検討している潜在的な解決策:
環境:
-
ジャンプ18
-
Python 3.x(組み込み)
- JSLスクリプト内での使用
Python から JMP に pandas DataFrames を送り返すためのガイダンスや実用的な例があれば、ぜひ教えてください。
自動化とスクリプト基本的なデータ分析とモデリングデータアクセスデータのブレンドとクリーンアップデータの探索と可視化Re: PythonからJMP 18データテーブルにPandas DataFrameを送信する際の問題スクリプトガイド > Python > JMPデータテーブルからのPandasデータフレームの作成 にある「データテーブル列をループ処理してPandasデータフレームを作成する」の例を確認してください。また、JMP19では、中間CSVを介さずにPythonデータフレームからJMPデータテーブルに変換する方が簡単だと思います(JMP Wish List)が、 JMP19には多くの問題があるため、まだ試していません。
Re: PythonからJMP 18データテーブルにPandas DataFrameを送信する際の問題dt_merged にはデータは含まれていますが、ビューは含まれていません。
使用
dt_merged <<新しいデータ ビュー;
の代わりに
dt_merged << ウィンドウを表示;
テーブルは存在しますが、関連付けられたウィンドウがまだありません。
また、JMP 18では、PythonのGet( df )はJMP 14-17と同様に、内部的にデータフレーム -> CSV、CSV -> data_table を使用します。JMPとPythonの境界を越えてデータにリアルタイムアクセスできるのは、JMPデータテーブルのみです。
JMP 19では状況が大幅に改善されました。JMPはPortable Dataframe Protocolをサポートしており、JMP dtからpandas DataFrameへの変換は1行のコードで済み、DataFrameからDataTableへの変換もさらに1行で済みます。これは、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まで待つことはできませんでした。
Re: PythonからJMP 18データテーブルにPandas DataFrameを送信する際の問題また、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)
Re: PythonからJMP 18データテーブルにPandas DataFrameを送信する際の問題データフレーム内の日付がかなり奇妙であることに気づきました。スクリーンショットを参照してください。これは日付形式であり、影響を受けるのはごくわずかで、日付と時刻は影響を受けないようです。
Re: PythonからJMP 18データテーブルにPandas DataFrameを送信する際の問題これは秒単位の日付です。列設定を変更することで、任意の数値を日付として表示できます。

Re: PythonからJMP 18データテーブルにPandas DataFrameを送信する際の問題ありがとうございます。解決しましたが、その間にJSLとPythonコードを併用しています。コード自体でこれを処理するためのより良い方法はあるでしょうか?
1 - エポックタイムオフセットを使用してPythonで処理する
2- jsl コード内の各列に列フォーマットを再割り当てします。[面倒]
Re: PythonからJMP 18データテーブルにPandas DataFrameを送信する際の問題- Unixタイムスタンプから実際の日付と時刻へ
<BR />:col << Format( "yyyy-mm-dd" );
Re: PythonからJMP 18データテーブルにPandas DataFrameを送信する際の問題スクリーンショットは例です。100の列があります:\ソースデータのフォーマットが一貫していません。ありがとうございます。
Re: PythonからJMP 18データテーブルにPandas DataFrameを送信する際の問題JMP19?
Re: PythonからJMP 18データテーブルにPandas DataFrameを送信する際の問題JMP 18、組織はJMP19に移行していません。テスト版のリリースなのか、開発中のアプリケーションなのかは分かりません。おそらく後継版だと思います。
Re: PythonからJMP 18データテーブルにPandas DataFrameを送信する際の問題不足している機能が復活するにはJMP19.1を待つ必要があるかもしれません: 文書化されていない秘密
それ以外にも:
JMP19に切り替える理由の1つ: from_dataframe()
JMP 19でPythonをさらに活用する
もう 1 つの理由: 列タグやフィルター ビューなどのデータ グリッドの素晴らしい改善。
JMP 19データテーブルでのデータの整理とフィルタリング
テスト システムに JMP19 を「手動で」インストールする機会はありますか?
Re: PythonからJMP 18データテーブルにPandas DataFrameを送信する際の問題はい、できます。まだ試していません。スクリプトの互換性も、JMP18を使っていない理由の一つです。他のユーザーはJMP18を使い続けるでしょうから。テーブル参照と結合で既にかなり多くの問題に直面しています。
Re: PythonからJMP 18データテーブルにPandas DataFrameを送信する際の問題
@zetaVagabond1 は次のように書きました:
私はすでに、テーブルの参照と結合に関して多くの問題に直面しています。
JMP18 と JMP17 の違いは何ですか?
Re: PythonからJMP 18データテーブルにPandas DataFrameを送信する際の問題JMPは、1904年1月1日のエポックを0秒の時刻として使用します(Mac Excelのエポック日付)。
Python は、時刻 0 の秒数として、標準の UNIX エポック日付である 1970 年 1 月 1 日を使用します。
JMP 19 は、JSL / Python の境界を越えて日付時刻値を適切にマーシャリングします。
JMP 19 には、メモリ内のデータ フレームから直接日付テーブルを作成する dt = jmp.from_dataframe(df) があります。
JMP 18 では、メモリ内での唯一の選択肢は、パンダの列をループし、日付/時刻の変換に注意しながら、列を自分で構築することです。
あるいは、CSV形式を使うこともできます。JMP 14~17ではこの方法で実行されていました。ただし、バイナリ -> CSV -> バイナリと変換すると、数値にわずかな差異が生じる可能性があることに注意してください。JMP 18のSAMPLE_SCRIPTS/Pythonディレクトリには、CSV形式を使う方法を示すサンプルがあります。基本的には、pandasにCSV形式で保存するように指示し、JMPにそのCSVを開くように指示します。
19 にアップグレードすることを強くお勧めします。19 では、データ テーブルの処理が大幅に改善されました。
Re: PythonからJMP 18データテーブルにPandas DataFrameを送信する際の問題ロリー・ヴァーデン:時間を増やすにはどうすればいいですか?
https://www.youtube.com/watch?v=y2X7c9TUQJ8

ここでは、IT 部門が JMP19 に切り替えるまで今日待ってください。説得するためにいくらか努力する必要があるかもしれません。
そうすれば、明日は素晴らしいコードを書いて使うことができます。
もう一つの方法は、今日からすでに時代遅れになっているコードを書き始めることです。
JMP19 を使用した Python:
- コーディングが簡単
- スリム
- はるかに速い