JMP19 - Avviso di deprecazione del Dataframe Interchange ProtocolHo notato questo nei miei log JSL di recente. jmp19 si è forse adattato a qualcos'altro? Questa funzionalità verrà gradualmente eliminata. In jmp18 utilizzavo una funzione personalizzata per convertire una tabella jmp in un dataframe pandas, ma non ha funzionato in jmp19. Quindi, quali sono i metodi per ottenere lo stesso risultato ora?
Eseguo il mio codice Python all'interno dello script JSL.
Python Send(o28k_raw);<BR />Python Submit(<BR />raw_data = pd.api.interchange.from_dataframe(o28k_raw)<BR />);
Questo avvertimento:
: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
Automazione e scriptingUnione e pulizia dei datiOggetto: JMP19 - Avviso di deprecazione del Dataframe Interchange ProtocolHai già visto "Approfondire l'utilizzo di Python in JMP 19" - JMP User Community ?
Lavorare con i Dataframe di Pandas è diventato più semplice in JMP 19, grazie alla nuova funzione jmp.from_dataframe().
Oggetto: JMP19 - Avviso di deprecazione del Dataframe Interchange ProtocolHo trovato il codice riportato di seguito allo stesso link, ma la query è diversa, come ho già detto.
pd.api.interchange.from_dataframe()
Oggetto: JMP19 - Avviso di deprecazione del Dataframe Interchange ProtocolÈ interessante notare che, quando eseguo il seguente script Python, non visualizzo alcun avviso:
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)
Potresti verificare se l'errore si verifica quando esegui il codice Python dall'editor Python di JMP, oppure se è specifico del codice Python eseguito tramite Python Submit?
Ho provato anche quanto segue e non mi ha dato alcun errore:
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);
Potresti testare questi script per vedere se anche da te generano lo stesso avviso?
Oggetto: JMP19 - Avviso di deprecazione del Dataframe Interchange ProtocolVisualizzo questo avviso sia quando eseguo codice Python tramite Python Submit, sia quando eseguo lo script Python dall'editor Python di JMP.
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
Oggetto: JMP19 - Avviso di deprecazione del Dataframe Interchange ProtocolGrazie per la risposta. Il frammento di codice Python qui sopra proviene dall'indice degli script, quindi di solito funziona senza problemi.
Se non stai utilizzando l'ultima versione di JMP (19.1.2), ti consigliamo di aggiornarla e riprovare. Se invece hai già l'ultima versione, ti suggerisco di contattare l'assistenza tecnica di JMP all'indirizzo support@jmp.com .
Oggetto: JMP19 - Avviso di deprecazione del Dataframe Interchange ProtocolL'avvertimento proviene dagli stessi panda.
Abbiamo apportato gli aggiornamenti interni per utilizzare l'interfaccia PyCapsule. La data di rilascio esatta dipenderà dai test necessari per garantirne la stabilità. Questo aggiungerà anche la funzione jmp.from_arrow() ed estenderà l'oggetto jmp.DataTable per supportare i requisiti dell'interfaccia Arrow. La funzione jmp.from_dataframe() è stata rielaborata internamente per utilizzare la nuova funzionalità.
import pandas as pd
dt = jmp.open(jmp.SAMPLE_DATA + "Big Class.jmp")
pandas_df = pd.DataFrame.from_arrow(dt)
print(pandas_df)
Oggetto: JMP19 - Avviso di deprecazione del Dataframe Interchange ProtocolL'avviso viene visualizzato con pandas 3.0 e versioni successive.
Oggetto: JMP19 - Avviso di deprecazione del Dataframe Interchange ProtocolGrazie per il chiarimento.
A quanto ho capito, l'attuale avviso di deprecazione proviene da Pandas piuttosto che da JMP, e le future versioni di JMP supporteranno direttamente l'interfaccia Arrow/PyCapsule, consentendo flussi di lavoro come:
dt = jmp.open(...)
pandas_df = pd.DataFrame.from_arrow(dt)
senza fare affidamento sul DataFrame Interchange Protocol.
Nel frattempo, sto cercando di individuare l'approccio migliore per la manutenzione degli script di produzione distribuiti su diverse versioni di JMP.
Storicamente, in JMP 18, mi affidavo a una funzione di conversione personalizzata:
def jmp_to_pandas(jmp_table):
data = {}
for col in jmp_table:
data[col.name] = list(col)
return pd.DataFrame(data)
Dopo essere passato a JMP 19, sono passato a:
<SPAN>pd.api.interchange.from_dataframe(...)</SPAN>
che funziona ma ora genera l'avviso di deprecazione di Pandas.
Mi consiglieresti di continuare a usare l'API di interscambio fino al rilascio del supporto per Arrow, quando dovrò rivedere lo script distribuito in produzione, oppure suggeriresti di tornare a una conversione personalizzata da DataTable a DataFrame per il codice di produzione che deve rimanere stabile tra gli aggiornamenti di versione di Pandas e JMP?
Inoltre, per la prossima implementazione di Arrow, sarà<SPAN>pirocchia</SPAN>Sarà una dipendenza obbligatoria, oppure l'interfaccia Arrow sarà esposta tramite JMP senza richiedere agli utenti di installare pacchetti aggiuntivi?
Grazie per le informazioni aggiuntive.
Oggetto: JMP19 - Avviso di deprecazione del Dataframe Interchange ProtocolIn generale, consigliamo di continuare a utilizzare i metodi più moderni di conversione dei DataFrame, come il protocollo di interscambio, per via dei vantaggi in termini di prestazioni. Se gli script richiedono specificamente l'accesso all'output della console, la soppressione dell'avviso potrebbe essere utile, ma in genere non è raccomandata.
import warnings
warnings.simplefilter(action='ignore', category=DeprecationWarning)
In termini di stabilità, questa deprecazione è contrassegnata come Pandas4Warning, il che significa che questi avvisi saranno applicati in pandas 4.0 (vedi la politica di deprecazione aggiornata ). Storicamente, pandas ha avuto una major release all'incirca ogni 3 anni, sebbene non abbia (a mia conoscenza) indicato una data di rilascio stimata. Siamo comunque fiduciosi che l'interfaccia Arrow PyCapsule sarà disponibile in JMP entro pandas 4.0.
Senza conoscere le versioni specifiche di JMP/pandas su cui si basa il flusso di lavoro, una conversione personalizzata di DataTable potrebbe comunque essere più adatta al caso d'uso. Va inoltre notato che è disponibile anche la funzione `jmp.from_dataframe_using_csv`, che non ha mostrato differenze significative con la versione principale di pandas (testata con la 2.3.3 rispetto alla 3.0.0). Questa funzione è disponibile in JMP 19 e continuerà ad esserlo in JMP 20.
Allo stato attuale dell'implementazione, `jmp.from_dataframe()` chiamerà internamente l'interfaccia Arrow PyCapsule ( `jmp.from_arrow` ) quando viene chiamato con un `pandas.DataFrame` per garantire la compatibilità con le versioni precedenti, quindi non dovrebbe essere necessario apportare modifiche allo script stesso. Tuttavia, per quanto riguarda la tua domanda successiva, pandas richiede pyarrow come dipendenza quando si utilizzano questi metodi, quindi potrebbe essere necessario modificare l'ambiente di esecuzione per installare pyarrow. A nostra conoscenza, questo sembra essere un problema specifico di pandas, poiché polars non richiede la dipendenza aggiuntiva di pyarrow.
Saremmo lieti di chiarire o rispondere a qualsiasi altra domanda tu possa avere su Python o sulle conversioni DataFrame, quindi non esitare a chiedere quando vuoi.