1

我正在研究 python 上的 pandas 项目。我收到一个 .csv 文件作为输入,如下所示:

Name   Timestamp       Data
A1       259           [1.1,1.0,0.1]
A1       260           [-0.1,1.2,0.3]
A1       261           [0.1,0.2,-0.3]
...
A1       14895         [1.4,0.3,1.8]
...      
A2       278           [-1.1,1.2,0.4]
A2       353           [-0.1,1.2,0.3]
A2       409           [-0.1,1.2,0.3]
...
A2       14900         [-0.1,1.2,0.3]
...
A1140    107           [-0.5,-1.0,-1.0]
A1140    107           [0.6,0.1,0.3]
A1140    114           [-1.1,-1.2,0.3] 
... 
A1140    14995         [-1,1.2,0.4]

我有 1140 多个名字和每个名字的成百上千的数据。数据以 200 赫兹的频率记录,我认为时间戳数字表示毫秒,虽然我不确定,但我无权访问此信息。我必须重新采样到 50 Hz 频率。

我怎样才能做到这一点?我是否需要将时间戳转换为实际秒数,然后使用.resample()0.25s 的功能?我应该使用.groupby["Name"]函数吗?先感谢您!

4

1 回答 1

1

我无法完整地回答这个问题,因为即使您不确定时间戳,但我会尝试为您提供一些一般性指导。
您在这里拥有的称为面板数据,每个“名称”都有许多不同的时间序列。
groupby(['Name']).apply(<func>)确实是一种有用的方法,因为它允许分别操作每个不同的名称,从而允许您使用更简单的数据类型time series
时间序列是以下类型的数据:

Date                  Value
2000-01-01 00:00:00   3
2000-01-01 00:03:00   12
2000-01-01 00:06:00   21

如您所见,采集每个样本的时间段为 3 分钟。我们可以这样调用resample()并将其转换为 10 分钟:

series.resample('10T').mean()

请注意,mean您可以使用.apply(<func>)来选择下采样方法。有关频率的更多信息,请考虑这个问题。


总而言之,您最好的选择是尝试找出确切的时间戳,将其转换为 DateTime 然后使用

df.groupby(['Name']).resample('20L').mean()

或使用 for 循环遍历每个名​​称并单独对每个系列使用重新采样。

于 2019-09-08T19:20:26.243 回答