2017-05-25 47 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