2017-05-25 80 views
0

我有一個系列vec已被採樣在2000Hz。我想要做的是以50Hz的步幅對這個系列進行採樣。我的問題是我不太明白我如何用熊貓做到這一點。如何通過僅提供採樣率來對時間序列進行採樣?

我不太明白,我怎麼能換我vecDataFrame和使用pd.date_range設置相應的時間戳。

代碼我可能表明你是明顯錯誤的,因此我不能真正告訴你我到目前爲止做了什麼。但我可以用僞Python向你展示我想要做的事情:

# Get a date range for vec 
date_range = pd.date_range(len(vec), sampling_rate=2000, unit='Hz') 
# Create a DataFrame for the 2000Hz series 
df_2k = pd.DataFrame(vec, index=date_range) 

# Sample down to 1950Hz, 1900Hz, .. 
df_1950Hz = df_2k.resample(sampling_rate=1950, unit='Hz') 
df_1900Hz = df_2k.resample(sampling_rate=1900, unit='Hz') 

任何想法我可以做到這一點?

我覺得還可以的工作是一樣的東西

df_1950Hz = df_2k.drop_every(nth_sample=int(2000/50)) 

回答

3

首先,從頻率構建一個時期:

freq = 1950 
period = '{}N'.format(int(1e9/freq)) 

這給你'512820N'其中大熊貓理解爲納秒。然後:

df2k.resample(period).mean() # you could use e.g. `last()` instead 

至於你的初始索引,也許你想這樣的:

freq = 2000 
period = '{}N'.format(int(1e9/freq)) 
index = pd.date_range(start, periods=len(vec), freq=period) 

哪裏start是任意的。

+0

嗯,這不適合我。你是如何初始化'df2k'的?獲取'ValueError:無效的頻率:512820.0N' – displayname

+0

@displayname:對不起,我通過添加int()來獲得512820N而不是512820.0N。現在嘗試代碼。 –

+0

如果你只能通過50hz,那會很好:-) – piRSquared