【问题标题】:How to resample timedeltas?如何重新采样时间增量?
【发布时间】:2020-08-03 17:38:26
【问题描述】:

我一直在运行一个输出两列数据的实验:

  1. 自实验开始以来的秒数(浮点数)
  2. 测量。 (浮动)

我现在想将其加载到 Pandas 中以重新采样并绘制测量结果。我以前做过,但那些时候我的时间戳是从纪元开始或日期时间 (YYY-MM-DD HH:mm:ss) 格式的。如果我将第一列作为整数加载,我将无法做到

data.resample('5Min', how='mean')

。如果我将我的第一列转换为timedelta(seconds=...),这似乎也是不可能的。我的问题是,是否可以在不破坏纪元转换的情况下重新采样这些数据?

【问题讨论】:

  • 您可以发布一些数据吗?否则很难提供帮助
  • 你使用什么日期格式(它应该总是时间戳?)
  • 为什么不将第一列转换为 timedelta?根据定义,当时间 0 是实验开始时,“自实验开始以来的秒数”是 timedelta

标签: python pandas


【解决方案1】:

您可以使用groupbytime // period 来执行此操作:

import pandas as pd
import numpy as np

t = np.random.rand(10000)*3600
t.sort()
v = np.random.rand(10000)

df = pd.DataFrame({"time":t, "value":v})

period = 5*60
s = df.groupby(df.time // period).value.mean()
s.index *= period

【讨论】:

  • 如果时间列包含日期时间而不是整数,有没有办法像这样重新采样?我尝试将它与日期时间一起使用并得到TypeError: incompatible type for a datetime/timedelta operation [__floordiv__]
【解决方案2】:

我有相同的传感器数据结构。第一列是自实验开始以来的秒数,其余列是值。 这是数据结构:

              time        x           y          z
      0     0.015948    0.403931    0.449005    -0.796860
      1     0.036006    0.403915    0.448029    -0.795395
      2     0.055885    0.404907    0.446548    -0.795853

这对我有用: 将时间转换为时间增量:

df.time=pd.to_timedelta(df.time,unit="s")

set the time as index

df.set_index("time",inplace=True)

重新采样到您想要的频率

df.resample("40ms").mean()

【讨论】:

  • 嗨,我试过 df.time = pd.to_timedelta(df.time, unit="s"),为什么我得到 AttributeError: 'DataFrame' object has no attribute 'time' ?跨度>
  • 我认为这是因为时间是python中对象的已知属性,所以尝试使用 df["time"] 代替
猜你喜欢
  • 2020-10-28
  • 2013-08-09
  • 2015-04-10
  • 1970-01-01
  • 2014-01-20
  • 1970-01-01
  • 2019-01-18
  • 2017-05-15
  • 2020-05-18
相关资源
最近更新 更多