Python Send () ne reconnaît pas le format datetime (envoyé sous forme de chaîne)Lors de l'envoi de tables de données aux dataframes pandas (Python), les valeurs numériques (datetimes) sont envoyées sous forme de chaînes.
Je ne m'attendrais pas à ce comportement, car maintenant je dois gérer cela manuellement (étant donné que les datetimes en Python et JMP sont différents).
Une solution de contournement? J'imagine que le plus simple serait de transformer le format JMP en entier, d'envoyer ces informations et de transformer la date en tenant compte de la logique derrière les dates JMP (somme des secondes depuis la date spécifique).
ClearLog();
dt = Open( "$SAMPLE_DATA/Functional Data/Weekly Weather Data.jmp");
t = dt << Subset(
Allrows,
Columns(:DATE)
);
Python Init();
Python Send( t );
Python Submit( "
import pandas as pd
print(t.dtypes)
");
Python Term();
// Output
// DATE object
// dtype: object
// Types: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.dtypes.html
//float float64
//int int64
//datetime datetime64[ns] << Expected
//string object
//dtype: object
ScriptingRe: Python Send () ne reconnaît pas le format datetime (envoyé sous forme de chaîne)Cette chaîne de message était pour R, mais je pense que vous pouvez utiliser le même concept pour Python.
https://community.jmp.com/t5/Discussions/How-to-send-dates-as-characters-from-JMP-to-R/td-p/50112
Re: Python Send () ne reconnaît pas le format datetime (envoyé sous forme de chaîne)PythonSend () enregistre les csv temporaires qui sont lus avec la valeur par défaut pd.read_csv ('myfile.csv'), donc pas de parse_date.
Pour faire face à cela, une option qui n'est pas impactée par le format de la date:
ClearLog();
dt = Open( "$SAMPLE_DATA/Functional Data/Weekly Weather Data.jmp");
t = dt << Subset(
Allrows,
Columns(:DATE)
);
t:DATE << Format(best);
Python Init();
Python Send( t ); // send the opened data table represented by dt to Python
Python Submit( "
import pandas as pd
print(t.dtypes)
print(t.head())
t.iloc[:,0] = pd.to_datetime(t.iloc[:,0], unit='s', origin=pd.Timestamp('1904-01-01'))
print(t.dtypes)
print(t.head())
");
Python Term();
// Output
// DATE int64
// dtype: object
// DATE
// 0 3534451200
// 1 3535228800
// 2 3537648000
// 3 3538252800
// 4 3538857600
// DATE datetime64[ns]
// dtype: object
// DATE
//0 2016-01-01
//1 2016-01-10
//2 2016-02-07
//3 2016-02-14
//4 2016-02-21
S'il y a une meilleure façon, faites-le moi savoir.