Python Send () erkennt das Datum / Uhrzeit-Format nicht (als Zeichenfolge gesendet)Beim Senden von Datentabellen an Pandas-Datenrahmen (Python) werden numerische Werte (Datumsangaben) als Zeichenfolgen gesendet.
Ich würde dieses Verhalten nicht erwarten, da ich jetzt manuell damit umgehen muss (wenn man bedenkt, dass die Datenzeiten in Python und JMP unterschiedlich sind).
Irgendeine Problemumgehung? Ich kann mir vorstellen, dass es am einfachsten wäre, das JMP-Format in eine Ganzzahl umzuwandeln, diese Informationen zu senden und das Datum unter Berücksichtigung der Logik hinter den JMP-Daten (Summe der Sekunden seit dem bestimmten Datum) umzuwandeln.
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
SkriptingBetreff: Python Send () erkennt das Datum / Uhrzeit-Format nicht (als Zeichenfolge gesendet)Diese Nachrichtenzeichenfolge war für R, aber ich denke, Sie können das gleiche Konzept für Python verwenden.
https://community.jmp.com/t5/Discussions/How-to-send-dates-as-characters-from-JMP-to-R/td-p/50112
Betreff: Python Send () erkennt das Datum / Uhrzeit-Format nicht (als Zeichenfolge gesendet)PythonSend () speichert temporäre CSVs, die mit dem Standardwert pd.read_csv ('myfile.csv') gelesen werden, daher kein parse_date.
Um dies zu bewältigen, eine Option, die vom Datumsformat nicht beeinflusst wird:
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
Wenn es einen besseren Weg gibt, lass es mich wissen.