Python Send() 無法識別日期時間格式(作為字符串發送)將數據表發送到 pandas 數據幀 (Python) 時,數值(日期時間)作為字符串發送。
我不希望出現這種行為,因為現在我必須手動處理這個問題(考慮到 Python 和 JMP 中的日期時間是不同的)。
有什麼解決辦法嗎? 我想最簡單的方法是將 JMP 格式轉換為整數,發送此信息,並考慮 JMP 日期背後的邏輯(自特定日期以來的秒數總和)轉換日期。
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
大規模定制回复:Python Send() 無法識別日期時間格式(作為字符串發送)PythonSend() 保存使用默認 pd.read_csv('myfile.csv') 讀取的臨時 csv,因此沒有 parse_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
如果有更好的方法,請告訴我。
回复:Python Send() 無法識別日期時間格式(作為字符串發送)該消息字符串適用於 R,但我認為您可以對 Python 使用相同的概念。
https://community.jmp.com/t5/Discussions/How-to-send-dates-as-characters-from-JMP-to-R/td-p/50112