我正在嘗試將一個由長時間測量序列組成的資料集分箱到多個離散分箱中。進行測量的時間保存在日期時間物件的 numpy 陣列中t_data。
我也將 bin 邊緣生成為 datetime 物件陣列t_edges。
當我列印出兩個陣列時,它們的內容顯示為一系列datetime.datetime(...)專案。
然后我嘗試使用以下方法將每個測量值分配t_data到相關的 bin 中:
t_bin = np.digitize(t_data, t_edges)
但是,這會導致以下錯誤:
File "<__array_function__ internals>", line 5, in digitize
File "python3.9/site-packages/numpy/lib/function_base.py", line 4922, in digitize
mono = _monotonicity(bins)
TypeError: Cannot cast array data from dtype('O') to dtype('float64') according to the rule 'safe'
這似乎是資料型別的問題,但我進行了一些搜索,但不確定如何更正。似乎一個被歸類為“物件” 'O',而另一個是浮點數?閱讀錯誤訊息我注意到資料系列和箱都應該單調增加,但也許是日期時間混淆了這一點?我知道這個問題似乎與 datetime64 有類似的問題,但沒有收到答案。
如果有人能給我一些東西來嘗試解決這個問題以使其作業(或者告訴我是否不可能將 np.digitize() 與日期時間序列一起使用),我將不勝感激。
最小作業示例:
from datetime import datetime, timedelta
import numpy as np
sdate = datetime.strptime('2017-01-01 18:00:00', "%Y-%m-%d %H:%M:%S")
edate = datetime.strptime('2017-01-01 18:00:30', "%Y-%m-%d %H:%M:%S")
t_data = np.array([sdate timedelta(minutes=x) for x in range((edate - sdate).seconds)])
t_edges = np.array([datetime.strptime('2017-01-01 18:00:00', "%Y-%m-%d %H:%M:%S"),
datetime.strptime('2017-01-01 18:00:10',"%Y-%m-%d %H:%M:%S"),
datetime.strptime('2017-01-01 18:00:20', "%Y-%m-%d %H:%M:%S")])
t_bin = np.digitize(t_data, t_edges)
我希望結果是這樣的 [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, ....., 3, 3, 3, 3, 3]
uj5u.com熱心網友回復:
似乎Numpy將您的日期時間物件視為純粹的物件。
我建議在應用 np.digitize 之前將日期時間物件轉換為時間戳。
例子:
from datetime import datetime, timedelta
import numpy as np
sdate = datetime.strptime('2017-01-01 18:00:00', "%Y-%m-%d %H:%M:%S")
edate = datetime.strptime('2017-01-01 18:00:30', "%Y-%m-%d %H:%M:%S")
t_data = np.array([(sdate timedelta(seconds=x)) for x in range((edate - sdate).seconds)])
t_edges = np.array([datetime.strptime('2017-01-01 18:00:00', "%Y-%m-%d %H:%M:%S"),
datetime.strptime('2017-01-01 18:00:10',"%Y-%m-%d %H:%M:%S"),
datetime.strptime('2017-01-01 18:00:20', "%Y-%m-%d %H:%M:%S")])
t_data_ts = [datetime.timestamp(t) for t in t_data]
t_edges_ts = [datetime.timestamp(t) for t in t_edges]
t_bin = np.digitize(t_data_ts, t_edges_ts)
我修復了您的代碼中的一些錯誤。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/347848.html
