簡體   English   中英

按時間順序更改頻率

[英]change frequency in time series

我有一個布爾變量的數據框,由時間戳確定。 時間戳是不規則的,我希望填補空白。 我知道所需的頻率是3ms。

到目前為止,我可以執行以下操作:

df = pd.read_csv(path, sep= ';')
df['timestamp'] = pd.to_datetime(df ['timestamp'], errors='raise',infer_datetime_format = True)
df = df.sort(['timestamp'])
df = df.set_index('timestamp')
df.reindex(pd.period_range(df.index[0], df.index[-1], freq='ms'))     
df = df.fillna(method = 'ffill')

因此,我使用ms間隔重新索引並填充缺失值(這正是我的情況:所有變量均為布爾值,因此在每時每刻,當前狀態都是數據中的最后一個出現)。

如何每3毫秒重新采樣一次?

編輯:似乎DataFrame.resample也可以用於上采樣。 關於如何在我的情況下使用它的任何建議? 我似乎不明白它是如何工作的。

使用DataFrame.asfreq

df = pd.DataFrame({
    'timestamp': pd.to_datetime(['2015-02-01 15:14:11.30',
                                 '2015-02-01 15:14:11.36',
                                 '2015-02-01 15:14:11.39']),
    'B': [7,10,3]
})
print (df)
                timestamp   B
0 2015-02-01 15:14:11.300   7
1 2015-02-01 15:14:11.360  10
2 2015-02-01 15:14:11.390   3

df = df.set_index('timestamp').asfreq('3ms', method='ffill')

print (df)
                          B
timestamp                  
2015-02-01 15:14:11.300   7
2015-02-01 15:14:11.303   7
2015-02-01 15:14:11.306   7
2015-02-01 15:14:11.309   7
2015-02-01 15:14:11.312   7
2015-02-01 15:14:11.315   7
2015-02-01 15:14:11.318   7
2015-02-01 15:14:11.321   7
2015-02-01 15:14:11.324   7
2015-02-01 15:14:11.327   7
2015-02-01 15:14:11.330   7
2015-02-01 15:14:11.333   7
2015-02-01 15:14:11.336   7
2015-02-01 15:14:11.339   7
2015-02-01 15:14:11.342   7
2015-02-01 15:14:11.345   7
2015-02-01 15:14:11.348   7
2015-02-01 15:14:11.351   7
2015-02-01 15:14:11.354   7
2015-02-01 15:14:11.357   7
2015-02-01 15:14:11.360  10
2015-02-01 15:14:11.363  10
2015-02-01 15:14:11.366  10
2015-02-01 15:14:11.369  10
2015-02-01 15:14:11.372  10
2015-02-01 15:14:11.375  10
2015-02-01 15:14:11.378  10
2015-02-01 15:14:11.381  10
2015-02-01 15:14:11.384  10
2015-02-01 15:14:11.387  10
2015-02-01 15:14:11.390   3

如果您的時間戳記在索引中:

df = df.resample('3ms').ffill()

編輯:

績效基准

import time
import pandas as pd


dd = {'dt': ['2018-01-01 00:00:00', '2018-01-01 01:12:59'], 'v':[1,1]}

df = pd.DataFrame(data=dd)
df['dt'] = pd.to_datetime(df['dt'])
df = df.set_index('dt')

start = time.time()
df = df.resample('3ms').ffill()
print(time.time() - start)


df = pd.DataFrame(data=dd)
df['dt'] = pd.to_datetime(df['dt'])
df = df.set_index('dt')

start = time.time()
df = df.asfreq('3ms', method='ffill')
print(time.time() - start)

print(df.shape)

結果:

0.03699994087219238
0.029999732971191406
(1459667, 1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM