在熊猫数据框中重新采样Hz

时间:2019-09-08 18:07:42

标签: python pandas time-series data-science resampling

我正在使用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 Hz的频率记录,我认为时间戳记数字表示毫秒,尽管我不确定,我无法访问此信息。 我必须重新采样到50 Hz频率。

我该怎么做?我是否需要将时间戳转换为实际秒数,然后将.resample()函数使用0.25s?我应该使用.groupby["Name"]函数吗? 预先谢谢你!

1 个答案:

答案 0 :(得分:1)

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

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>)选择下采样方法。有关频率的更多信息,请考虑this问题。


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

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

或带有for循环遍历每个名​​称,并对每个系列分别使用重采样。