Python 如何通过仅提供采样率来对时间序列进行采样?

Python 如何通过仅提供采样率来对时间序列进行采样?,python,pandas,time-series,Python,Pandas,Time Series,我有一个系列的vec,它以2000Hz的频率采样。我想做的是一步一步地对这个系列进行采样。我的问题是,我不太明白我如何能做到这一点与熊猫 我不太明白如何将我的vec包装到DataFrame中,并使用pd.date\u range相应地设置时间戳 我可以向您展示的代码是完全错误的,因此我无法向您展示到目前为止我所做的事情。但我可以用伪Python向您展示我想做的事情: # Get a date range for vec date_range = pd.date_range(len(vec),

我有一个系列的
vec
,它以2000Hz的频率采样。我想做的是一步一步地对这个系列进行采样。我的问题是,我不太明白我如何能做到这一点与熊猫

我不太明白如何将我的
vec
包装到
DataFrame
中,并使用
pd.date\u 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))

首先,根据频率构建一个周期:

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
是任意的。

首先,从频率中构造一个周期:

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
是任意的。

Hm,这对我不起作用。您是如何初始化df2k的?获取
value错误:无效频率:512820.0N
@displayname:抱歉,我通过添加
int()。现在就试试代码。如果你能通过50hz:-)就好了,正如@piRSquared提到的,我更喜欢一个更简单的界面——也许有一天pandas会提供。现在你的解决方案对我来说很好。谢谢:)@displayname:只需做一个函数:
defhz(n):返回{}n.format(int(1e9/freq))
,然后你可以说
df.resample(Hz(1950))
。简单。嗯,这对我不起作用。您是如何初始化df2k的?获取
value错误:无效频率:512820.0N
@displayname:抱歉,我通过添加
int()。现在就试试代码。如果你能通过50hz:-)就好了,正如@piRSquared提到的,我更喜欢一个更简单的界面——也许有一天pandas会提供。现在你的解决方案对我来说很好。谢谢:)@displayname:只需做一个函数:
defhz(n):返回{}n.format(int(1e9/freq))
,然后你可以说
df.resample(Hz(1950))
。容易的。