我正在撰寫一些代碼來用空間(x,y)和時間插入一些資料。資料需要在規則網格上。我似乎無法創建一個通用函式來查找具有規則間距的日期范圍。對我來說失敗的范圍是:
date_min = numpy.datetime64('2022-10-24T00:00:00.000000000')
date_max = numpy.datetime64('2022-11-03T00:00:00.000000000')
它需要與我當前的時間值大致匹配,在這種情況下是 44。
periods = 44
我嘗試測驗時差是否可被 2 整除,然后將 1 添加到周期數,這在很多情況下都有效,但在這個時間范圍內似乎并不真正有效:
def unique_diff(x):
return numpy.unique(numpy.diff(x))
unique_diff(pd.date_range(date_min, date_max, periods=periods))
Out[31]: array([20093023255813, 20093023255814], dtype='timedelta64[ns]')
unique_diff(pd.date_range(date_min, date_max, periods=periods 1))
Out[32]: array([19636363636363, 19636363636364], dtype='timedelta64[ns]')
unique_diff(pd.date_range(date_min, date_max, periods=periods-1))
Out[33]: array([20571428571428, 20571428571429], dtype='timedelta64[ns]')
但是,它確實適用于 2:
unique_diff(pd.date_range(date_min, date_max, periods=periods 2))
Out[34]: array([19200000000000], dtype='timedelta64[ns]')
我可以繼續嘗試不同的周期增量,直到我得到解決方案,但我寧愿知道為什么會發生這種情況以及如何在目標周期數的任何最小/最大時間推廣這個問題
uj5u.com熱心網友回復:
您的日期范圍不會除以納秒解析度的周期:
# as the contains start and end, there's a step fewer than there are periods
steps = periods - 1
int(date_max - date_min) / steps
# 20093023255813.953
一個解決方案可能是向上(或向下)您的最大日期,使其以納秒解析度均勻劃分:
date_max_r = (date_min
int(numpy.ceil(int(date_max - date_min) / (steps)) * (steps)))
unique_diff(pd.date_range(date_min, date_max_r, periods=periods))
# array([20093023255814], dtype='timedelta64[ns]')
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/519650.html
標籤:Python熊猫麻木的
