将数据从 25 赫兹下采样到 10 赫兹
Downsampling data frome 25hz to 10hz
我有一些以 25hz(每秒 25 个样本)采样的时间序列数据
time_in_secconds data_vals
199.655 0.549038
199.696 0.83472
199.736 0.478569
199.776 0.114157
199.817 0.217603
199.858 0.701952
199.898 0.23409
199.938 -0.237923
199.979 0.337316
200.019 1.17735
200.059 1.42538
我想降低到每秒 10 个样本。我一直在考虑用 pandas 做这件事,但有几个问题。第一个是时代用什么索引对象?是 https://pandas.pydata.org/docs/reference/api/pandas.TimedeltaIndex.seconds.html 吗?
第二个是,在这样做之后,我实际上如何着手重新采样以在新的 10hz 下同时获得 time_in_seconds
和 data_vals
。
resample
函数的文档包含更多有用的信息。
由于 time_in_secods
测量自某个事件以来的时间,因此 TimedeltaIndex
在这里是最合适的。以下是通过对原始数据点进行平均来重新采样的方法:
# Original data @ 25Hz
t = np.arange(199, 201, .04)
df = pd.DataFrame({
'time_in_seconds': t,
'data_vals': np.random.uniform(-1, 1, len(t))
})
# Resample to 10Hz
output = (
df.set_index(pd.to_timedelta(df['time_in_seconds'], unit='s'))
['data_vals']
.resample('100ms')
.mean()
)
output.index = output.index.total_seconds()
还有其他重采样方法,例如min
、max
或加权平均。有关详细信息,请参阅文档。
我有一些以 25hz(每秒 25 个样本)采样的时间序列数据
time_in_secconds data_vals
199.655 0.549038
199.696 0.83472
199.736 0.478569
199.776 0.114157
199.817 0.217603
199.858 0.701952
199.898 0.23409
199.938 -0.237923
199.979 0.337316
200.019 1.17735
200.059 1.42538
我想降低到每秒 10 个样本。我一直在考虑用 pandas 做这件事,但有几个问题。第一个是时代用什么索引对象?是 https://pandas.pydata.org/docs/reference/api/pandas.TimedeltaIndex.seconds.html 吗?
第二个是,在这样做之后,我实际上如何着手重新采样以在新的 10hz 下同时获得 time_in_seconds
和 data_vals
。
resample
函数的文档包含更多有用的信息。
由于 time_in_secods
测量自某个事件以来的时间,因此 TimedeltaIndex
在这里是最合适的。以下是通过对原始数据点进行平均来重新采样的方法:
# Original data @ 25Hz
t = np.arange(199, 201, .04)
df = pd.DataFrame({
'time_in_seconds': t,
'data_vals': np.random.uniform(-1, 1, len(t))
})
# Resample to 10Hz
output = (
df.set_index(pd.to_timedelta(df['time_in_seconds'], unit='s'))
['data_vals']
.resample('100ms')
.mean()
)
output.index = output.index.total_seconds()
还有其他重采样方法,例如min
、max
或加权平均。有关详细信息,请参阅文档。