1 回答

TA貢獻1871條經驗 獲得超13個贊
不會丟失數據的真實性resample()
已經重新創建了一個示例數據集,我在其中以128 秒的間隔模擬了源數據
然后
resample()
到512s桶這可能意味著存在空桶,其中最后一個為NaN并且基礎值列表為空
你需要決定在這些情況下你想做什么。對于我對溫度數據進行上采樣的情況,我的
dropna()
其他選擇顯然是fillna()
由于存在NaN您應該考慮
dfr = df.resample("512s")["val"].agg(last="last", vals=lambda s: list(s)).astype({"last":"Int64"})
維護列的數據類型(即從int64更改為float64)
總之,源數據的完整性沒有損失。您需要決定如何處理沒有適合 *bin* 的基礎數據的情況
d = [d for d in pd.date_range(dt.datetime(2019,5,1,2),
dt.datetime(2019,5,1,4), freq="128s")
if random.randint(0,3) < 2 ] # miss some sample times... so resampling will give NaNs
df = pd.DataFrame({"ts":d, "val":[random.randint(0,50) for x in d]}).set_index("ts")
dfr = df.resample("512s")["val"].agg(last="last", vals=lambda s: list(s))
dfr
輸出
last vals
ts
2019-05-01 01:59:28 27.0 [1, 41, 27]
2019-05-01 02:08:00 48.0 [14, 14, 48]
2019-05-01 02:16:32 43.0 [2, 49, 43]
2019-05-01 02:25:04 43.0 [43]
2019-05-01 02:33:36 44.0 [44]
2019-05-01 02:42:08 38.0 [39, 38]
2019-05-01 02:50:40 37.0 [37]
2019-05-01 02:59:12 25.0 [39, 25]
2019-05-01 03:07:44 1.0 [29, 8, 1]
2019-05-01 03:16:16 35.0 [12, 20, 35]
2019-05-01 03:24:48 33.0 [20, 33]
2019-05-01 03:33:20 5.0 [11, 5]
2019-05-01 03:41:52 NaN []
2019-05-01 03:50:24 9.0 [9]
添加回答
舉報