2017-02-27 81 views
2

我使用fbprophet數據集進行時間序列分析。數據集有兩列,分別爲dateyTypeError:int()參數必須是字符串,類似字節的對象或數字,而不是'切片'

date     y 
January 01, 1992  146376 
February 01, 1992  147079 
March 01, 1992  159336 
April 01, 1992  163669 
May 01, 1992   170068  


    date  y 
01/01/92 146376 
01/02/92 147079 
01/03/92 159336 
01/04/92 163669 
01/05/92 170068 

我首先通過使用pd.to_datetime然後擬合模型model = Prophet().fit(df)變更日期成日期時間格式。但是,結果不斷顯示我TypeError: int() argument must be a string, a bytes-like object or a number, not 'slice'。無論如何解決這個問題?

這裏是我的代碼,

df.date = pd.to_datetime(df.date) 
df['date'] = df['date'].dt.strftime('%Y-%m-%d') 
model = Prophet() 
model.fit(df) 

當我運行model.fit(df)我上面提到的TypeError顯示出來。

回答

2

大多數迴歸和分類器方法只接受數字或字符串的dtypes,因此此錯誤消息抱怨您的datetime列。

假設我們有以下的數據幀:

In [63]: df 
Out[63]: 
     date  y 
0 1992-01-01 146376 
1 1992-01-02 147079 
2 1992-01-03 159336 
3 1992-01-04 163669 
4 1992-01-05 170068 

我們可以創建一個數字列 - UNIX時間戳(自1970-01-01 00:00:00 UTC秒#):

In [64]: df['unix_ts'] = df.date.astype(np.int64) // 10**9 

In [65]: df 
Out[65]: 
     date  y unix_ts 
0 1992-01-01 146376 694224000 
1 1992-01-02 147079 694310400 
2 1992-01-03 159336 694396800 
3 1992-01-04 163669 694483200 
4 1992-01-05 170068 694569600 

這是我們如何能夠把它轉換返回datetime dtype:

In [66]: pd.to_datetime(df.unix_ts, unit='s') 
Out[66]: 
0 1992-01-01 
1 1992-01-02 
2 1992-01-03 
3 1992-01-04 
4 1992-01-05 
Name: unix_ts, dtype: datetime64[ns] 
+0

感謝您的回答。但在使用 'df ['unix_ts'] = df.date.astype(np.int64)// 10 ** 9後,我仍然得到相同的TypeError; df ['date'] = pd.to_datetime(df.unix_ts,unit ='s'); df = df.drop(labels = ['unix_ts'],axis = 1)' – Peggy

2

我有類似的使用先知的問題。在我的情況下,問題是在「DS」列重複日期(即日期)

我加

df=df.drop_duplicates(['date'], keep='last') 

(顯然,在功能上這沒有任何意義,但它可能會孤立你的問題)

+1

是的。我使用'resample()'按日期收集重複日期。非常感謝你! – Peggy

相關問題