如何将 pandas Dataframe 时间序列数据从 8hz 重新采样到 16hz?

Posted

技术标签:

【中文标题】如何将 pandas Dataframe 时间序列数据从 8hz 重新采样到 16hz?【英文标题】:How to resample pandas Dataframe time series data from 8hz to 16hz? 【发布时间】:2021-11-08 02:30:08 【问题描述】:

我在 pandas Dataframe 中有时间序列数据,采样率为 8hz,即每秒 8 个样本。我需要将其转换为 16 hz 数据,即每秒 16 个样本。 索引位于第一列,格式为 yyyy-mm-dd hh:mm:ss.ssssss。 我无法使用标准 pandas 命令重新采样。 可以请帮助我如何做到这一点? 其他答案是关于小时'H',分钟'm',但是有人可以帮助我了解数据在哪里。

【问题讨论】:

【参考方案1】:

您实际上可以这样做。 Pandas resample 支持高达纳秒的值。以下是一些需要牢记的价值观:

S        seconds
L        milliseconds
U        microseconds
N        nanoseconds

对于您的情况,每秒 8 个样本相当于 125 毫秒,每秒 16 个样本相当于 62.5 毫秒。

生成一个例子(8hz):

index = pd.date_range('1/1/2000', periods=9, freq='125L')
series = pd.Series(range(9), index=index)

给予:

2000-01-01 00:00:00.000    0
2000-01-01 00:00:00.125    1
2000-01-01 00:00:00.250    2
2000-01-01 00:00:00.375    3
2000-01-01 00:00:00.500    4
2000-01-01 00:00:00.625    5
2000-01-01 00:00:00.750    6
2000-01-01 00:00:00.875    7
2000-01-01 00:00:01.000    8

重新采样:

series = series.resample('62.5L').ffill()

给予:

2000-01-01 00:00:00.000000    0
2000-01-01 00:00:00.062500    0
2000-01-01 00:00:00.125000    1
2000-01-01 00:00:00.187500    1
2000-01-01 00:00:00.250000    2
2000-01-01 00:00:00.312500    2
2000-01-01 00:00:00.375000    3
2000-01-01 00:00:00.437500    3
2000-01-01 00:00:00.500000    4
2000-01-01 00:00:00.562500    4
2000-01-01 00:00:00.625000    5
2000-01-01 00:00:00.687500    5
2000-01-01 00:00:00.750000    6
2000-01-01 00:00:00.812500    6
2000-01-01 00:00:00.875000    7
2000-01-01 00:00:00.937500    7
2000-01-01 00:00:01.000000    8

【讨论】:

填充工作正常。但插值不起作用,插值填充的是 nan 而不是插值。你能帮帮我吗? @user5349 而不是ffill 你只需要输入interpolate 这应该可以工作。如果不是,我会检查列的类型是 float(而不是 object)。 你说的是对的,我转成float,然后就成功了。谢谢

以上是关于如何将 pandas Dataframe 时间序列数据从 8hz 重新采样到 16hz?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 sql 查询转换为 Pandas Dataframe 和 PySpark Dataframe

如何将 GitHub 制作成 pandas DataFrame? [复制]

如何将 pandas DataFrame 的第一列作为一个系列?

如何将假人添加到 Pandas DataFrame?

如何将 mongodb 集合中的数据加载到 pandas 的 DataFrame 中?

如何将 pandas DataFrame 列乘以单个值? [复制]